达成协议:在我的Styles.xml中,我有一个通用样式,一个继承了另一个样式,如下所示:

<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,则可以使用,但是颜色完全不同。我该如何解决?

最佳答案

因此,这是样式/主题的继承问题。有两种从样式继承属性的方法。

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”主题,实际上您必须从具有该属性的样式继承。因此,您可以创建另一个从AppTheme.NoActionBar继承的Theme.AppCompat.NoActionBar

为了更好地了解主题/样式,请查看关于样式和主题的Google I/O 2016链接。

关于android - Android Styles传承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38083262/

10-11 00:11