recyclerView 中的图像不响应使用滑动占位符将主题更改为暗模式
Posted
技术标签:
【中文标题】recyclerView 中的图像不响应使用滑动占位符将主题更改为暗模式【英文标题】:Images in recyclerView don't respond to change in theme to dark mode using glide placeholder 【发布时间】:2021-12-28 19:25:34 【问题描述】:RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_all_songs"
android:layout_
android:layout_
android:layout_marginTop="10dp"
/>
回收站查看项目
<ImageView
android:id="@+id/img_song"
android:layout_
android:layout_
android:contentDescription="@string/app_logo"
app:albumId="@song.albumId"/>
<TextView
android:id="@+id/txt_song_name"
android:layout_
android:layout_
android:layout_marginEnd="15dp"
android:ellipsize="end"
android:layout_marginStart="10dp"
android:maxLines="1"
android:text="@song.title"
android:textColor="@color/app_name_color"
android:textSize="15sp"
app:marquee="@true"
app:selected="@safeUnbox(viewModel.currentData.id == song.id)" />
绑定适配器
@BindingAdapter("app:albumId", "app:recycled", "app:blurred", requireAll = false)
fun setAlbumId(
view: ImageView,
albumId: Long,
recycled: Boolean = false,
blurred: Boolean = false)
view.clipToOutline = true
val uri = ContentUris.withAppendedId(ARTWORK_URI, albumId)
Glide
.with(view)
.load(uri)
.placeholder(R.drawable.ic_default_album_art)
.transform(CenterCrop(), RoundedCorners(8))
.into(view)
ic_default_album_art
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="30"
android:viewportHeight="30">
<path
android:pathData="M5,0L25,0A5,5 0,0 1,30 5L30,25A5,5 0,0 1,25 30L5,30A5,5 0,0 1,0
25L0,5A5,5 0,0 1,5 0z"
android:fillColor="@color/album_art_default_color"/>
</vector>
colors.xml
<color name="album_art_default_color">#EFEFEF</color>
colors.xml(夜间)
<color name="album_art_default_color">#4D4D4D</color>
更改主题代码
//on click change to light theme
sortView.findViewById<ConstraintLayout>(R.id.lyt_light_theme).setOnClickListener
storageViewModel.changeTheme(resources.getString(R.string.light))
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
builder.dismiss()
//on click change to dark theme
sortView.findViewById<ConstraintLayout>(R.id.lyt_dark_theme).setOnClickListener
storageViewModel.changeTheme(resources.getString(R.string.dark))
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
builder.dismiss()
//on click change to default theme
sortView.findViewById<ConstraintLayout>(R.id.lyt_default_theme).setOnClickListener
storageViewModel.changeTheme(resources.getString(R.string.default_theme))
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
builder.dismiss()
我在我的应用中切换到深色、浅色或默认(手机主题)。
问题
当我切换到浅色/深色主题时;图像不改变颜色。它仅遵循系统/手机主题。
所以,当手机默认主题为深色模式时,它使用深色资源,反之亦然。
Glide 占位符不支持应用亮/暗模式资源还是什么??
【问题讨论】:
你怎么换主题,添加逻辑。 已添加。请查看更新后的问题 【参考方案1】:或许你应该以这种方式加载占位符:
Glide
.with(view)
.load(uri)
.placeholder(ContextCompat.getDrawable(context, R.drawable.ic_default_album_art))
.transform(CenterCrop(), RoundedCorners(8))
.into(view)
【讨论】:
以上是关于recyclerView 中的图像不响应使用滑动占位符将主题更改为暗模式的主要内容,如果未能解决你的问题,请参考以下文章
解决recyclerview滑动冲突,修复CollapsingToolbarLayout折叠效果
RecyclerView 滑动删除仍然显示不完整滑动的可绘制