使用appcompat v7,以后的设备会忽略Android操作栏样式

时间:2014-11-07 21:04:43

标签: android xml android-styles android-appcompat

我正在使用Action Bar支持库(appcompat v7),我的app设置为最小api为7,目标为21。

我有两个样式文件,一个基本文件,一个针对设备api 11 +。

在运行KitKat的设备上运行应用程序时,似乎忽略android:actionBarStyle,将操作栏设置为默认设置(@ style / Widget.AppCompat.ActionBar.Solid),而不是应用给定的背景

但是如果我删除我的v11样式/注释掉它们,KitKat会监听base styles.xml文件中设置的actionBarStyle属性并设置我的自定义背景而没有任何问题。

所以我的问题是,我的v11样式出了什么问题?

根据我的理解,根据android文档,您应该使用android:前缀为运行11+的设备提供其他样式,但这似乎对我不起作用

剥离,这是我的/res/values/styles.xml文件:

<style name="My.Theme" parent="@style/Theme.AppCompat">
    <item name="actionBarStyle">@style/ActionBar.Solid</item>
</style>

<style name="ActionBar.Solid" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="background">@drawable/ab_solid_</item>
</style>

这是我的/res/values-v11/styles.xml文件:

<style name="My.Theme" parent="@style/Theme.AppCompat">
    <item name="android:actionBarStyle">@style/ActionBar.Solid</item>
</style>

<style name="ActionBar.Solid" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="android:background">@drawable/ab_solid_</item>
</style>

如您所见,两者之间的唯一区别是使用android:前缀。

1 个答案:

答案 0 :(得分:4)

According to the official doc,使用 AppCompat-v21,您可以在values中删除所有值-v14 +操作栏样式并仅使用一个主题声明:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- Set AppCompat’s actionBarStyle -->
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
</style>