Android Material Chip主题覆盖

时间:2019-12-02 20:29:26

标签: android material-design material-components material-components-android android-chips

我要自定义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>之类的其他内容,它也可以像这样正常工作。

材料文档(如果可以这样称呼)确实没有帮助。

2 个答案:

答案 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样式。