扩展MaterialCardView不应用主题。

3
根据材料规格https://material.io/develop/android/components/material-card-view/,colorSurface适用于卡片的背景颜色。
当我们像这样在xml中指定卡片时,它可以正常工作。
<com.google.android.material.card.MaterialCardView
    android:layout_width="100dp"
    android:layout_height="100dp"></com.google.android.material.card.MaterialCardView>

当我运行这个程序时,我可以看到颜色表面被正确地应用于上面的卡片。
如果我通过编程方式创建一张卡片,这也能正常工作。
addView(MaterialCardView(this).apply {
        layoutParams = ViewGroup.LayoutParams(300,300)
    })

然而,一旦我从MaterialCardView扩展以制作自己的自定义视图,似乎与此相关的主题连接就会丢失。颜色表面没有应用,而卡片默认为白色。
class CustomView @JvmOverloads constructor(
    context: Context?,
    attributeSet: AttributeSet? = null,
    defStyleAttr: Int = 0
) : MaterialCardView(context, attributeSet, defStyleAttr){

}


<com.seed.formviewactivity.CustomView
        android:layout_width="100dp"
        android:layout_height="100dp"></com.seed.formviewactivity.CustomView>

我的自定义视图现在没有应用colorSurface颜色。这是已知的问题吗?

1
尝试将R.attr.materialCardViewStyle用作defStyleAttr的默认值,而不是0。 - Gabriele Mariotti
1
解决了。将其发布为答案。 - Muhammad Ahmed AbuTalib
1个回答

3

在你的构造函数中,你正在使用defStyleAttr: Int = 0

你应该将R.attr.materialCardViewStyle应用为默认值,而不是0

这样,你的自定义 CardView 将使用由materialCardViewStyle属性在应用主题中定义的样式。

Material Components Library 提供的默认值为:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
  <!-- ... -->
  <item name="materialCardViewStyle">@style/Widget.MaterialComponents.CardView</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接