原来第三方库的style会覆盖主项目的style
在写泡网客户端,准备使用最新的design库,无赖遇到一个非常蛋疼的问题,无论我如何设置主题,都会出现
do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false 。。。
然而我的主题设置的完全没有问题:
<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="colorPrimary">@color/theme_primary</item>
<!-- darker variant for the status bar and contextual app bars -->
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<!-- theme UI controls like checkboxes and text fields -->
<item name="colorAccent">@color/theme_primary</item>
<item name="colorControlHighlight">@color/sa_green_transparent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
</style>
这个问题困扰了我好几天。
一直以为是studio或者design库的bug,差点就放弃design库了。然而今天突然想到修改下主题的colorPrimary等属性,意外发现修改后颜色还是老样子。
看来这个主题完全没有起作用。
是不是因为项目中用到的其他模块把AppBaseTheme覆盖了呢?
我们的项目中还有两个本地依赖的库,自己写的,而这两个库中都还有style文件,并且这些style文件恰恰有:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
</resources>
这里的AppBaseTheme覆盖了主模块中的AppBaseTheme,主模块中AppBaseTheme继承自
Theme.AppCompat.Light.NoActionBar
而这里的继承自
Theme.AppCompat.Light.DarkActionBar
因此,总是会报do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false 。。。这样的错误。
但是,为什么会被覆盖呢,难道依赖的库反而有更高优先级?
不是!主项目的优先级是最高的。
如果依赖的库中只有values目录,那么它下面的styles.xml不会覆盖主项目。
而如果依赖的库中有更精准的values目录,比如values-v14,而主项目没有values-v14,则有可能覆盖某些版本的手机。
比如我4.4的手机就是被values-v14给覆盖了。
注:
其中API 11+代表android 3.0 +
其中API 14+代表android 4.0 +
记录在此,加深印象,也希望对别人有用。