2015-09-18 2 views
1

У меня есть две темы: одна имеет ActionBar и одну без нее. Кажется излишним делать дубликаты стилей, есть ли способ упростить его?Наследование стиля Android

Благодаря

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/primary_color</item> 
    <item name="android:windowBackground">@color/bg_color</item> 
    <item name="colorAccent">@color/accent_color</item> 
    <item name="colorPrimaryDark">@color/darker_color</item> 

    <!-- Button style --> 
    <item name="android:buttonStyle">@style/ButtonStyle</item> 
    <item name="buttonStyle">@style/ButtonStyle</item> 
</style> 
<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/primary_color</item> 
    <item name="android:windowBackground">@color/bg_color</item> 
    <item name="colorAccent">@color/accent_color</item> 
    <item name="colorPrimaryDark">@color/darker_color</item> 

    <!-- Button style --> 
    <item name="android:buttonStyle">@style/ButtonStyle</item> 
    <item name="buttonStyle">@style/ButtonStyle</item> 
</style> 

<style name="ButtonStyle" parent="Widget.AppCompat.Button"> 
    <item name="android:background">@color/primary_color</item> 
</style> 

ответ

0

К сожалению, из-за способа, что стиль/Тема наследования работает, нет никакого способа обойти это. Вы можете прочитать больше об этом здесь:

Android Styles heritage

Одним из вариантов, однако, было бы скопировать содержимое темы NoActionBar. Оказывается, что он содержит только 2 строки:

<item name="windowActionBar">false</item> 
<item name="windowNoTitle">true</item> 

Так что ваш код будет выглядеть следующим образом

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/primary_color</item> 
    <item name="android:windowBackground">@color/bg_color</item> 
    <item name="colorAccent">@color/accent_color</item> 
    <item name="colorPrimaryDark">@color/darker_color</item> 

    <!-- Button style --> 
    <item name="android:buttonStyle">@style/ButtonStyle</item> 
    <item name="buttonStyle">@style/ButtonStyle</item> 
</style> 

<!-- NoActionBar theme --> 
<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

Теперь вы наследуемые атрибуты AppTheme, а также получать поведение NoActionBar. Очевидно, что это не безупречно, если атрибуты NoActionBar меняются в будущем, но это может быть хорошим вариантом для кого-то со многими атрибутами в своей базовой AppTheme.

Смежные вопросы