浅色模式下CardView与App背景色分离设置时cardBackgroundColor不生效问题
问题原因
你在themes.xml中全局配置了<item name="android:background">@color/gray</item>,该属性会为应用内所有View添加默认灰色背景,优先级高于CardView的app:cardBackgroundColor属性,导致你单独给CardView设置的背景色无法生效。
解决方案
推荐优先采用修改全局主题配置的方案,避免后续其他控件出现类似背景异常问题:
- 修改themes.xml配置,将全局
android:background替换为android:windowBackground,仅设置窗口背景,不影响子控件的背景配置:
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.MovieSpotter" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/purple_500</item> <item name="colorPrimaryVariant">@color/purple_700</item> <item name="colorOnPrimary">@color/white</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/teal_200</item> <item name="colorSecondaryVariant">@color/teal_700</item> <item name="colorOnSecondary">@color/black</item> <!-- Status bar color. --> <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- 替换为windowBackground,仅设置窗口背景 --> <item name="android:windowBackground">@color/gray</item> </style> </resources>
- 修改布局文件中CardView的背景色配置,改为白色即可,写死白色色值的情况下深浅模式都会保持白色:
<androidx.cardview.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" card_view:cardCornerRadius="16dp" app:cardBackgroundColor="#FFFFFFFF" >
替代方案
如果不想修改全局主题配置,可以在CardView标签中添加android:background="@null",清除全局给它添加的默认灰色背景,即可让app:cardBackgroundColor配置生效。
内容的提问来源于stack exchange,提问作者petestmart
相关产品推荐
相关产品推荐

