Объедините цвета в одной теме - PullRequest
1 голос
/ 06 ноября 2019

Я бы хотел создать родительские темы Theme.MaterialComponents.DayNight.NoActionBar и Theme.MaterialComponents.DayNight. Но я не хочу дублировать цвета в них, например

<resources>

<style name="AppTheme.Base" parent="Theme.MaterialComponents.DayNight">

    <item name="colorPrimary">@color/color_primary</item>
    <item name="colorPrimaryVariant">@color/color_primary_variant</item>
    <item name="colorSecondary">@color/color_secondary</item>
    <item name="colorSecondaryVariant">@color/color_secondary_variant</item>

    <item name="android:colorBackground">@color/color_background</item>
    <item name="colorSurface">@color/color_surface</item>
    <item name="colorError">@color/color_error</item>

    <item name="colorOnPrimary">@color/color_on_primary</item>
    <item name="colorOnSecondary">@color/color_on_secondary</item>
    <item name="colorOnBackground">@color/color_on_background</item>
    <item name="colorOnSurface">@color/color_on_surface</item>
    <item name="colorOnError">@color/color_on_error</item>
</style>

<style name="AppTheme.Base.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">

    <item name="colorPrimary">@color/color_primary</item>
    <item name="colorPrimaryVariant">@color/color_primary_variant</item>
    <item name="colorSecondary">@color/color_secondary</item>
    <item name="colorSecondaryVariant">@color/color_secondary_variant</item>

    <item name="android:colorBackground">@color/color_background</item>
    <item name="colorSurface">@color/color_surface</item>
    <item name="colorError">@color/color_error</item>

    <item name="colorOnPrimary">@color/color_on_primary</item>
    <item name="colorOnSecondary">@color/color_on_secondary</item>
    <item name="colorOnBackground">@color/color_on_background</item>
    <item name="colorOnSurface">@color/color_on_surface</item>
    <item name="colorOnError">@color/color_on_error</item>
</style>

Можно ли объединить цвета в одну тему и наследовать в 2 темах?

1 Ответ

1 голос
/ 06 ноября 2019

Просто используйте:

<style name="AppTheme.Base" parent="Theme.MaterialComponents.DayNight">
   <!-- add the colors -->
</style>


<style name="AppTheme.Base.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

Таким образом, стиль AppTheme.Base.NoActionBar наследует все стили от стиля AppTheme.Base выше и добавляет атрибут windowActionBar windowNoTitle.

Также ознакомьтесь с официальной документацией :

Примечание. Если вы используете точечную нотацию для расширения стиля и также включаете родительский атрибут, тогдародительские стили переопределить любые стили, унаследованные через точечную запись.

...