2016-06-28 41 views
0

这里是处理:在我Styles.xml我有一个大致的风格与一个inherinting其他,因为它遵循:Android的风格传承

<resources> 

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

<style name="AppTheme.NoActionBar" parent="@style/AppTheme"> 
    <item name="colorPrimary">#0acf66</item> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

当我申请的第二个主题(AppTheme。 NoActionBar)它继承了颜色,但操作栏仍然存在。如果我将第二个样式的父类更改为Theme.AppCompat.NoActionBar,它可以工作,但颜色完全不同。我该如何解决它?

回答

0

所以这是styles/themse的继承问题。有两种方法从样式继承属性。

1,通过点符号(隐含的):

<style name="Theme.AppCompat.NoActionBar.Custom"> 
    // the parent will be Theme.AppCompat.NoActionBar 
</style> 

2.通过父标签(明确的)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    //the parent is Theme.AppCompat.Light.DarkActionBar 
</style> 

有一件事要永远记住,明确的继承战胜隐性遗传。

所以你的情况

<style name="AppTheme.NoActionBar" parent="@style/AppTheme"> 
    // your parent is AppTheme, and new style is AppThem.NoActionBar, 
     but it doesn't inherit from an actual NoActionBar style. 
</style> 

为了有一个“NoActionBar”的主题,确实是你必须从有产权的样式继承。因此,您可以创建另一个从Theme.AppCompat.NoActionBar继承的AppTheme.NoActionBar

要获得主题/样式的更好的主意,请查看关于样式和主题的这个真棒Google I/O 2016链接。

+0

感谢您的回复。我只是想避免重复这两个主题中的项目,例如#0acf66。有没有办法做到这一点,仍然隐藏在第二主题的动作栏? –

+0

据我所知,没有没有。但通常的做法是让两个主题具有相同的属性,一个具有操作栏,另一个没有。 – danypata