Переопределение темы Android Material Chip Theme

Я хочу настроить материальный чип.

Я бы подумал, как это сделать:

<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 не влияет на чипы. Но если я установлю app:chipBackgroundColor="@color/chips" в xml, это сработает.

Это также отлично работает для других вещей, например, <item name="materialAlertDialogTheme">@style/AlertDialogTheme</item>.

Материальная документация (если это можно так назвать) действительно не помогает.


comment
Стиль определяется атрибутом chipStyle. Оно работает. Как вы определяете чип в макете?   -  person Gabriele Mariotti    schedule 03.12.2019
comment
Я полагаю, вы подозревали что-то подобное. Я поставил style="@style/Widget.MaterialComponents.Chip.Choice" на фишки... Я чувствую себя глупо. Спасибо, что привели меня туда.   -  person smdufb    schedule 03.12.2019


Ответы (2)


Тема вашего приложения правильная.

стиль по умолчанию, используемый Chip определяется в теме приложения с помощью chipStyle атрибут.

<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.

person Gabriele Mariotti    schedule 03.12.2019

если вы определяете стиль чипа в макете xml, чип переопределяет вашу тему. Это может работать, если вы очистите стиль чипа в макете xml.

person rmakiyama    schedule 03.12.2019