pref: 优化透明主题界面

This commit is contained in:
HuanChengFly 2021-08-04 22:09:56 +08:00
parent 5dc4d6d107
commit e78f29223a
8 changed files with 193 additions and 79 deletions

View File

@ -20,6 +20,7 @@ import android.widget.TextView
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.Keep import androidx.annotation.Keep
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import butterknife.ButterKnife import butterknife.ButterKnife
import cn.jzvd.Jzvd import cn.jzvd.Jzvd
@ -67,6 +68,16 @@ abstract class BaseActivity : SwipeBackActivity(), ExtraRefreshable, CoroutineSc
return false return false
} }
fun showDialog(builder: AlertDialog.Builder.() -> Unit): AlertDialog {
val dialog = AlertDialog.Builder(this)
.apply(builder)
.create()
if (isActivityRunning) {
dialog.show()
}
return dialog
}
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
VoicePlayerView.Manager.release() VoicePlayerView.Manager.release()

View File

@ -11,10 +11,11 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import android.widget.LinearLayout
import android.widget.SeekBar import android.widget.SeekBar
import android.widget.SeekBar.OnSeekBarChangeListener import android.widget.SeekBar.OnSeekBarChangeListener
import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat
import androidx.palette.graphics.Palette import androidx.palette.graphics.Palette
@ -26,6 +27,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.huanchengfly.tieba.post.* import com.huanchengfly.tieba.post.*
import com.huanchengfly.tieba.post.BaseApplication.Companion.translucentBackground import com.huanchengfly.tieba.post.BaseApplication.Companion.translucentBackground
@ -81,9 +83,18 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
@BindView(R.id.button_back) @BindView(R.id.button_back)
lateinit var backBtn: View lateinit var backBtn: View
@BindView(R.id.bottom_sheet)
lateinit var bottomSheet: LinearLayout
@BindView(R.id.button_finish) @BindView(R.id.button_finish)
lateinit var finishBtn: View lateinit var finishBtn: View
@BindView(R.id.mask)
lateinit var maskView: View
@BindView(R.id.experimental_tip)
lateinit var experimentalTipView: View
@BindView(R.id.color_theme) @BindView(R.id.color_theme)
lateinit var colorTheme: ViewGroup lateinit var colorTheme: ViewGroup
@ -230,11 +241,20 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
@SuppressLint("ApplySharedPref", "ClickableViewAccessibility") @SuppressLint("ApplySharedPref", "ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
(findViewById(R.id.tip) as TextView).apply { experimentalTipView.setOnClickListener {
text = HtmlCompat.fromHtml(getString(R.string.tip_translucent_theme), HtmlCompat.FROM_HTML_MODE_LEGACY) showDialog {
setTitle(R.string.title_translucent_theme_experimental_feature)
setMessage(
HtmlCompat.fromHtml(
getString(R.string.tip_translucent_theme),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
setNegativeButton(R.string.btn_close, null)
}
} }
listOf( listOf(
findViewById(R.id.custom_color), findViewById(R.id.custom_color),
findViewById(R.id.select_pic), findViewById(R.id.select_pic),
darkColorBtn, darkColorBtn,
lightColorBtn, lightColorBtn,
@ -267,7 +287,7 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
ThemeUtils.refreshUI(this) ThemeUtils.refreshUI(this)
} }
(findViewById(R.id.select_color_recycler_view) as RecyclerView).apply { (findViewById(R.id.select_color_recycler_view) as RecyclerView).apply {
addItemDecoration(HorizontalSpacesDecoration(0, 0, 16.dpToPx(), 16.dpToPx(), false)) addItemDecoration(HorizontalSpacesDecoration(0, 0, 12.dpToPx(), 12.dpToPx(), false))
layoutManager = MyLinearLayoutManager( layoutManager = MyLinearLayoutManager(
this@TranslucentThemeActivity, this@TranslucentThemeActivity,
MyLinearLayoutManager.HORIZONTAL, MyLinearLayoutManager.HORIZONTAL,
@ -292,6 +312,25 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
mUri = Uri.fromFile(file) mUri = Uri.fromFile(file)
invalidateFinishBtn() invalidateFinishBtn()
} }
val bottomSheetBehavior =
(bottomSheet.layoutParams as CoordinatorLayout.LayoutParams).behavior as BottomSheetBehavior
bottomSheetBehavior.addBottomSheetCallback(object :
BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {}
override fun onSlide(bottomSheet: View, slideOffset: Float) {
maskView.alpha = slideOffset
maskView.visibility = if (slideOffset < 0.01f) {
View.GONE
} else {
View.VISIBLE
}
}
})
maskView.setOnClickListener {
bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
}
refreshBackground() refreshBackground()
refreshTheme() refreshTheme()
fetchWallpapers() fetchWallpapers()
@ -308,7 +347,6 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
} }
} }
@SuppressLint("ApplySharedPref")
override fun onColorSelected(dialogId: Int, color: Int) { override fun onColorSelected(dialogId: Int, color: Int) {
appPreferences.translucentPrimaryColor = toString(color) appPreferences.translucentPrimaryColor = toString(color)
ThemeUtils.refreshUI(this) ThemeUtils.refreshUI(this)
@ -316,7 +354,6 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
override fun onDialogDismissed(dialogId: Int) {} override fun onDialogDismissed(dialogId: Int) {}
@SuppressLint("ApplySharedPref")
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.select_color -> return true R.id.select_color -> return true
@ -351,7 +388,7 @@ class TranslucentThemeActivity : BaseActivity(), View.OnClickListener, OnSeekBar
}) })
} }
fun invalidateFinishBtn() { private fun invalidateFinishBtn() {
if (mUri != null) { if (mUri != null) {
finishBtn.visibility = View.VISIBLE finishBtn.visibility = View.VISIBLE
} else { } else {

View File

@ -5,6 +5,6 @@ import kotlinx.coroutines.Deferred
import retrofit2.http.GET import retrofit2.http.GET
interface LiteApiInterface { interface LiteApiInterface {
@GET("https://raw.githubusercontent.com/HuanCheng65/huancheng65.github.io/master/TiebaLite/wallpapers.json") @GET("https://huancheng65.github.io/TiebaLite/wallpapers.json")
fun wallpapersAsync(): Deferred<ApiResult<List<String>>> fun wallpapersAsync(): Deferred<ApiResult<List<String>>>
} }

View File

@ -43,11 +43,14 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
@BindView(R.id.recycler_view) @BindView(R.id.recycler_view)
lateinit var mRecyclerView: RecyclerView lateinit var mRecyclerView: RecyclerView
@JvmField
@BindView(R.id.refresh) @BindView(R.id.refresh)
var mRefreshLayout: SmartRefreshLayout? = null lateinit var mRefreshLayout: SmartRefreshLayout
private val virtualLayoutManager: VirtualLayoutManager by lazy { VirtualLayoutManager(attachContext) } private val virtualLayoutManager: VirtualLayoutManager by lazy {
VirtualLayoutManager(
attachContext
)
}
private val delegateAdapter: DelegateAdapter by lazy { DelegateAdapter(virtualLayoutManager) } private val delegateAdapter: DelegateAdapter by lazy { DelegateAdapter(virtualLayoutManager) }
private lateinit var forumAdapter: NewForumAdapter private lateinit var forumAdapter: NewForumAdapter
private lateinit var forumTopsLayoutAdapter: ForumTopsLayoutAdapter private lateinit var forumTopsLayoutAdapter: ForumTopsLayoutAdapter
@ -57,13 +60,13 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
if (preload) { if (preload) {
PreLoader.listenData<ForumPageBean>(preloadId, DataHolder()) PreLoader.listenData<ForumPageBean>(preloadId, DataHolder())
} else if (mDataBean == null) { } else if (mDataBean == null) {
mRefreshLayout?.autoRefresh() mRefreshLayout.autoRefresh()
} }
} }
override fun onFragmentVisibleChange(isVisible: Boolean) { override fun onFragmentVisibleChange(isVisible: Boolean) {
if (isVisible && mDataBean == null) { if (isVisible && mDataBean == null) {
mRefreshLayout?.autoRefresh() mRefreshLayout.autoRefresh()
} }
} }
@ -117,7 +120,7 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
goodClassifyLayoutAdapter.adapter.onSwitchListener = this goodClassifyLayoutAdapter.adapter.onSwitchListener = this
} }
public override fun getLayoutId(): Int { override fun getLayoutId(): Int {
return R.layout.fragment_forum return R.layout.fragment_forum
} }
@ -142,8 +145,8 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
mRefreshLayout!!.setOnRefreshListener { refresh() } mRefreshLayout.setOnRefreshListener { refresh() }
mRefreshLayout!!.setOnLoadMoreListener { loadMore() } mRefreshLayout.setOnLoadMoreListener { loadMore() }
mRecyclerView.apply { mRecyclerView.apply {
layoutManager = virtualLayoutManager layoutManager = virtualLayoutManager
adapter = delegateAdapter adapter = delegateAdapter
@ -157,10 +160,10 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
} }
if (newState == RecyclerView.SCROLL_STATE_IDLE) { if (newState == RecyclerView.SCROLL_STATE_IDLE) {
Glide.with(attachContext) Glide.with(attachContext)
.resumeRequests() .resumeRequests()
} else { } else {
Glide.with(attachContext) Glide.with(attachContext)
.pauseRequests() .pauseRequests()
} }
} }
}) })
@ -169,21 +172,25 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
} }
private fun loadMore() { private fun loadMore() {
TiebaApi.getInstance().forumPage(forumName!!, page + 1, sortType, classifyId).enqueue(object : Callback<ForumPageBean> { TiebaApi.getInstance().forumPage(forumName!!, page + 1, sortType, classifyId)
override fun onFailure(call: Call<ForumPageBean>, t: Throwable) { .enqueue(object : Callback<ForumPageBean> {
mRefreshLayout?.finishLoadMore(false) override fun onFailure(call: Call<ForumPageBean>, t: Throwable) {
} mRefreshLayout.finishLoadMore(false)
}
override fun onResponse(call: Call<ForumPageBean>, response: Response<ForumPageBean>) { override fun onResponse(
page += 1 call: Call<ForumPageBean>,
val forumPageBean = response.body()!! response: Response<ForumPageBean>
mRefreshLayout?.finishLoadMore() ) {
mDataBean = forumPageBean page += 1
pageSize = forumPageBean.page?.pageSize?.toInt()!! val forumPageBean = response.body()!!
forumAdapter.addData(forumPageBean) mRefreshLayout.finishLoadMore()
mRefreshLayout?.setNoMoreData(mDataBean!!.page?.hasMore == "0") mDataBean = forumPageBean
} pageSize = forumPageBean.page?.pageSize?.toInt()!!
}) forumAdapter.addData(forumPageBean)
mRefreshLayout.setNoMoreData(mDataBean!!.page?.hasMore == "0")
}
})
} }
fun refresh() { fun refresh() {
@ -191,52 +198,60 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
delegateAdapter.clear() delegateAdapter.clear()
delegateAdapter.notifyDataSetChanged() delegateAdapter.notifyDataSetChanged()
page = 1 page = 1
TiebaApi.getInstance().forumPage(forumName!!, page, sortType, classifyId).enqueue(object : Callback<ForumPageBean> { TiebaApi.getInstance().forumPage(forumName!!, page, sortType, classifyId)
override fun onFailure(call: Call<ForumPageBean>, t: Throwable) { .enqueue(object : Callback<ForumPageBean> {
var errorCode = -1 override fun onFailure(call: Call<ForumPageBean>, t: Throwable) {
if (t is TiebaException) { var errorCode = -1
errorCode = t.code if (t is TiebaException) {
} errorCode = t.code
if (!isGood) {
if (attachContext is OnRefreshedListener) {
(attachContext as OnRefreshedListener).onFailure(errorCode, t.message)
} }
} if (!isGood) {
mRefreshLayout?.finishRefresh(false) if (attachContext is OnRefreshedListener) {
if (errorCode == -1) { (attachContext as OnRefreshedListener).onFailure(errorCode, t.message)
Util.showNetworkErrorSnackbar(mRecyclerView) { }
mRefreshLayout?.autoRefresh()
} }
return mRefreshLayout.finishRefresh(false)
if (errorCode == -1) {
Util.showNetworkErrorSnackbar(mRecyclerView) {
mRefreshLayout.autoRefresh()
}
return
}
Toast.makeText(
attachContext,
attachContext.getString(R.string.toast_error, errorCode, t.message),
Toast.LENGTH_SHORT
).show()
} }
Toast.makeText(attachContext, attachContext.getString(R.string.toast_error, errorCode, t.message), Toast.LENGTH_SHORT).show()
}
override fun onResponse(call: Call<ForumPageBean>, response: Response<ForumPageBean>) { override fun onResponse(
val forumPageBean = response.body()!! call: Call<ForumPageBean>,
if (!isGood) { response: Response<ForumPageBean>
if (attachContext is OnRefreshedListener) { ) {
(attachContext as OnRefreshedListener).onSuccess(forumPageBean) val forumPageBean = response.body()!!
if (!isGood) {
if (attachContext is OnRefreshedListener) {
(attachContext as OnRefreshedListener).onSuccess(forumPageBean)
}
} }
mRefreshLayout.finishRefresh()
mDataBean = forumPageBean
pageSize = forumPageBean.page?.pageSize?.toInt()!!
forumAdapter.setData(forumPageBean)
mRefreshLayout.setNoMoreData(mDataBean!!.page?.hasMore == "0")
reloadAdapters()
} }
mRefreshLayout?.finishRefresh() })
mDataBean = forumPageBean
pageSize = forumPageBean.page?.pageSize?.toInt()!!
forumAdapter.setData(forumPageBean)
mRefreshLayout?.setNoMoreData(mDataBean!!.page?.hasMore == "0")
reloadAdapters()
}
})
} }
override fun onRefresh() { override fun onRefresh() {
mRefreshLayout?.autoRefresh() mRefreshLayout.autoRefresh()
} }
override fun onSwitch(which: Int) { override fun onSwitch(which: Int) {
if (isGood && mDataBean != null) { if (isGood && mDataBean != null) {
classifyId = mDataBean!!.forum?.goodClassify?.get(which)?.classId!! classifyId = mDataBean!!.forum?.goodClassify?.get(which)?.classId!!
mRefreshLayout?.autoRefresh() mRefreshLayout.autoRefresh()
} }
} }
@ -252,7 +267,7 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
internal inner class DataHolder : DataListener<ForumPageBean?> { internal inner class DataHolder : DataListener<ForumPageBean?> {
override fun onDataArrived(forumPageBean: ForumPageBean?) { override fun onDataArrived(forumPageBean: ForumPageBean?) {
if (forumPageBean == null) { if (forumPageBean == null) {
mRefreshLayout?.autoRefresh() mRefreshLayout.autoRefresh()
return return
} }
if (!isGood) { if (!isGood) {
@ -260,11 +275,11 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
(attachContext as OnRefreshedListener).onSuccess(forumPageBean) (attachContext as OnRefreshedListener).onSuccess(forumPageBean)
} }
} }
mRefreshLayout?.finishRefresh() mRefreshLayout.finishRefresh()
mDataBean = forumPageBean mDataBean = forumPageBean
pageSize = forumPageBean.page?.pageSize?.toInt()!! pageSize = forumPageBean.page?.pageSize?.toInt()!!
forumAdapter.setData(forumPageBean) forumAdapter.setData(forumPageBean)
mRefreshLayout?.setNoMoreData(mDataBean!!.page?.hasMore == "0") mRefreshLayout.setNoMoreData(mDataBean!!.page?.hasMore == "0")
reloadAdapters() reloadAdapters()
} }
} }
@ -277,7 +292,11 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
const val PARAM_PRELOAD_ID = "preload_id" const val PARAM_PRELOAD_ID = "preload_id"
const val DEFAULT_CLASSIFY_ID = "0" const val DEFAULT_CLASSIFY_ID = "0"
private const val DEFAULT_PAGE_SIZE = 30 private const val DEFAULT_PAGE_SIZE = 30
fun newInstance(forumName: String?, isGood: Boolean, sortType: ForumSortType): ForumFragment { fun newInstance(
forumName: String?,
isGood: Boolean,
sortType: ForumSortType
): ForumFragment {
val args = Bundle() val args = Bundle()
args.putString(PARAM_FORUM_NAME, forumName) args.putString(PARAM_FORUM_NAME, forumName)
args.putBoolean(PARAM_IS_GOOD, isGood) args.putBoolean(PARAM_IS_GOOD, isGood)
@ -288,7 +307,12 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
return fragment return fragment
} }
fun newInstance(forumName: String?, isGood: Boolean, sortType: ForumSortType, preloadId: Int): ForumFragment { fun newInstance(
forumName: String?,
isGood: Boolean,
sortType: ForumSortType,
preloadId: Int
): ForumFragment {
val args = Bundle() val args = Bundle()
args.putString(PARAM_FORUM_NAME, forumName) args.putString(PARAM_FORUM_NAME, forumName)
args.putBoolean(PARAM_IS_GOOD, isGood) args.putBoolean(PARAM_IS_GOOD, isGood)

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?colorControlHighlight">
<item android:drawable="@drawable/bg_radius_10dp" />
</ripple>

View File

@ -49,10 +49,18 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<View
android:alpha="0"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#60000000"
android:id="@+id/mask" />
<com.huanchengfly.tieba.post.widgets.theme.TintLinearLayout <com.huanchengfly.tieba.post.widgets.theme.TintLinearLayout
android:background="@drawable/bg_top_radius_10dp" android:background="@drawable/bg_top_radius_10dp"
app:backgroundTint="@color/theme_color_card_light" app:backgroundTint="@color/theme_color_card_light"
app:behavior_peekHeight="120dp" app:behavior_peekHeight="120dp"
android:id="@+id/bottom_sheet"
app:layout_behavior="@string/bottom_sheet_behavior" app:layout_behavior="@string/bottom_sheet_behavior"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -200,7 +208,7 @@
android:minHeight="16dp" android:minHeight="16dp"
android:progressDrawable="@drawable/bg_seekbar_round" android:progressDrawable="@drawable/bg_seekbar_round"
app:progressTint="@color/default_color_primary" app:progressTint="@color/default_color_primary"
app:progressBackgroundTint="@color/default_color_divider" app:progressBackgroundTint="@color/color_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
@ -221,7 +229,7 @@
android:minHeight="16dp" android:minHeight="16dp"
android:progressDrawable="@drawable/bg_seekbar_round" android:progressDrawable="@drawable/bg_seekbar_round"
app:progressTint="@color/default_color_primary" app:progressTint="@color/default_color_primary"
app:progressBackgroundTint="@color/default_color_divider" app:progressBackgroundTint="@color/color_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
@ -247,13 +255,40 @@
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
<com.huanchengfly.tieba.post.widgets.theme.TintTextView <LinearLayout
android:layout_marginTop="12dp" android:layout_marginTop="8dp"
app:tint="@color/color_text_secondary" android:gravity="center_vertical"
android:id="@+id/tip"
android:textSize="14sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:id="@+id/experimental_tip"
android:padding="12dp"
android:background="@drawable/bg_radius_10dp_ripple"
android:backgroundTint="@color/color_divider"
android:orientation="horizontal">
<com.huanchengfly.tieba.post.widgets.theme.TintImageView
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_round_warning"
app:tint="@color/red_accent" />
<TextView
android:layout_marginStart="8dp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="@string/title_translucent_theme_experimental_feature"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@color/color_text_secondary" />
<com.huanchengfly.tieba.post.widgets.theme.TintImageView
android:layout_marginStart="8dp"
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_round_help_green"
app:tint="@color/color_text_secondary" />
</LinearLayout>
</com.huanchengfly.tieba.post.widgets.theme.TintLinearLayout> </com.huanchengfly.tieba.post.widgets.theme.TintLinearLayout>
<FrameLayout <FrameLayout

View File

@ -2,7 +2,8 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:paddingBottom="8dp" android:paddingBottom="4dp"
android:paddingRight="4dp"
android:clipToPadding="false" android:clipToPadding="false"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">

View File

@ -458,4 +458,5 @@
<string name="dark_color">深色</string> <string name="dark_color">深色</string>
<string name="light_color">浅色</string> <string name="light_color">浅色</string>
<string name="title_translucent_theme_wallpapers">推荐壁纸</string> <string name="title_translucent_theme_wallpapers">推荐壁纸</string>
<string name="title_translucent_theme_experimental_feature">透明主题当前仍为实验性特性</string>
</resources> </resources>