我的布局看起来像
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
我想从我的片段动态应用主题
requireContext().setTheme(R.style.MyTheme)
不幸的是,android:windowBackground
并未在RecyclerView
上设置背景。
<style name="MyTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="android:windowBackground">@drawable/gradient_background</item>
</style>
此外,android:background
无法正常工作。它在每个单元格而不是整个屏幕上设置渐变背景。
<style name="MyTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="android:background">@drawable/gradient_background</item>
</style>
在android:background
上设置RecyclerView
有用
<androidx.recyclerview.widget.RecyclerView
android:background="@drawable/gradient_background"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
但是我想通过传递一个主题来实现。有可能吗?
答案 0 :(得分:0)
根据您的使用习惯,您可以按照自己的样式创建自定义属性,例如:
<style name="MyTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="recyclerViewBackground">@drawable/paywall_background</item>
</style>
<style name="MyTheme2" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="recyclerViewBackground">@drawable/another_background</item>
</style>
将此文件添加到 values 文件夹下的 attrs.xml 文件中(如果没有,请创建它):
<attr name="recyclerViewBackground" format="reference" />
并使用此设置背景:
<com.airbnb.epoxy.EpoxyRecyclerView
style="?theme"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?recyclerViewBackground"/>
更改主题并重新创建片段,现在应该会更改RecyclerView
的背景。另外,请确保您将在此视图中使用的每个主题都包含属性recyclerViewBackground
,否则将出现异常。