我要自定义Material芯片。
我想这是怎么做的:
<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
.... lots more theme stuff here
<item name="chipStyle">@style/MaterialChips</item>
<item name="chipGroupStyle">@style/MaterialChips</item>
<item name="chipStandaloneStyle">@style/MaterialChips</item>
</style>
<style name="MaterialChips" parent="Widget.MaterialComponents.Chip.Choice">
<item name="chipBackgroundColor">@color/chips</item>
</style>
chipStyle
之类的标签都不会影响筹码。但是,如果我在xml中设置app:chipBackgroundColor="@color/chips"
,就可以使用。
对于诸如<item name="materialAlertDialogTheme">@style/AlertDialogTheme</item>
之类的其他内容,它也可以像这样正常工作。
材料文档(如果可以这样称呼)确实没有帮助。
答案 0 :(得分:1)
如果您在布局xml中定义芯片样式,则芯片会覆盖您的主题。 如果您在布局xml中清除芯片样式,则可能会起作用。
答案 1 :(得分:1)
您的应用主题正确。
Chip
组件使用的默认样式在应用程序主题中由 chipStyle
attribute定义。
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<!-- Default style for chip component -->
<item name="chipStyle">@style/Widget.MaterialComponents.Chip.Action</item>
</style>
您可以使用以下方式自定义此样式:
<style name="AppTheme" parent="Theme.MaterialComponents.*">
<!-- Default value for chipStyle -->
<item name="chipStyle">@style/MaterialChips</item>
</style>
<style name="MaterialChips" parent="@style/Widget.MaterialComponents.Chip.Choice">
<!-- ... -->
<item name="chipBackgroundColor">@color/chips</item>
</style>
如果在布局中指定style
属性,则此样式将覆盖默认值。
<com.google.android.material.chip.Chip
style="@style/Widget.MaterialComponents.Chip.Entry"
.../>
在这种情况下,芯片使用Widget.MaterialComponents.Chip.Entry
样式。