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 优化—滑动性能提升

解决recyclerview滑动冲突,修复CollapsingToolbarLayout折叠效果

RecyclerView 滑动删除仍然显示不完整滑动的可绘制

RecyclerView滑动删除仍然显示不完整滑动可绘制

如何使用kotlin滑动删除存储在firestore中的recyclerview项目?

ViewPager2 TabLayout Fragment RecyclerView滑动冲突