扩展MaterialCardView不适用于主题

问题描述 投票:1回答:1

根据材料规格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>

我的CustomView现在没有应用colorSurface。

这是一个已知问题吗?

android material-design android-cardview material-components-android material-components
1个回答
0
投票

在构造函数中,您正在使用defStyleAttr: Int = 0。您应将R.attr.materialCardViewStyle用作默认值,而不是0

通过这种方式,您的自定义CardView将使用materialCardViewStyle属性在您的应用主题中定义的样式。

材料组件库提供的默认值为:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
  <!-- ... -->
  <item name="materialCardViewStyle">@style/Widget.MaterialComponents.CardView</item>
</style>
© www.soinside.com 2019 - 2024. All rights reserved.