gpt4 book ai didi

android - 扩展 MaterialCardView 不应用主题

转载 作者:行者123 更新时间:2023-12-04 15:34:11 25 4
gpt4 key购买 nike

根据 Material 规范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 进行扩展以制作我自己的自定义 View ,似乎与此的主题连接就丢失了。未应用颜色表面,而是卡默认为白色

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。

这是一个已知问题吗?

最佳答案

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

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

Material 组件库提供的默认值为:

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

关于android - 扩展 MaterialCardView 不应用主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com