Style 的 CardBackgroundColor 不适用于 CardView

Style's CardBackgroundColor not working on CardView

我不明白为什么我的 CardView 没有获得我的样式设置的背景颜色。根据另一个 Whosebug 问题的答案 使用旧的 AndroidSupport-library 你应该可以通过将它添加到默认的 AppTheme 来设置它:

<item name="cardBackgroundColor">#ff00ab</item>

但是,这对我来说不会以任何方式改变颜色。通常通过 app:cardBackgroundColor="..." 设置颜色效果很好,但对于我的应用程序,我需要它来处理样式。

我还使用一个新项目对其进行了测试,只是添加了最少的步骤使其工作,但它仍然没有按样式设置的卡片颜色...

这是我的 activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="testing string"/>

    </androidx.cardview.widget.CardView>
</RelativeLayout>

在我的 styles.xml 中,我已将上面的简单行添加到默认的 Base 应用程序主题中。

感谢您帮助解决我的问题!

编辑: AppTheme 只是默认的 AppTheme,上面添加了一行。最终看起来像这样:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="cardBackgroundColor">#ff00ab</item>
</style>

您可以像这样在 styles.xml 中创建自己的样式

<style name="card_view_style">
    <item name="cardBackgroundColor">#ff00ab</item>
</style>

然后像这样将此样式应用到您的卡片视图

<androidx.cardview.widget.CardView
    style="@style/card_view_style"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

对我来说,您发布的内容适用于 API 19 和 22,但不适用于 API 28。以下内容适用于所有 API 级别:

与其在应用的主题中定义 cardBackgroundColor,不如定义 cardViewStyle。这是应用于所有 CardView 的“默认”样式(除非在布局文件中被 style 属性明确覆盖)。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="cardViewStyle">@style/MyCardViewStyle</item>
</style>

<style name="MyCardViewStyle">
    <item name="cardBackgroundColor">#ff00ab</item>
</style>

您可以通过检查其源代码来确定小部件是否支持默认样式属性。将有一个如下所示的构造函数:

public CardView(@NonNull Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, R.attr.cardViewStyle);
}

在这里,第三个参数是 R.attr.cardViewStyle,所以我们知道这就是我们的主题应该定义的内容。对于不支持默认样式的组件,第三个参数将改为0