2015-09-18 110 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中具有许多属性的人来说,这可能是一个不错的选择。