【问题标题】:AppCompat - Error while styling the actionbarAppCompat - 设置操作栏样式时出错
【发布时间】:2025-11-21 09:05:02
【问题描述】:

我正在使用 appcompat 库来实现操作栏。使用自定义样式时会报错 android:actionBarStyle requires API level 11 (current min is 10)。我希望该应用程序与 android 2.3 兼容。我使用的是谷歌示例代码。

themes.xml
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
       parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>

    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_background</item>

    <!-- Support library compatibility -->
    <item name="background">@drawable/actionbar_background</item>
</style>

【问题讨论】:

标签: android android-layout


【解决方案1】:

AppCompat 与 2.3 兼容,但您需要定义 2 种样式(如上所示):一种用于原生操作栏实现 (android:actionBarStyle),一种用于兼容性实现 (actionBarStyle)。

如果你在你的 values/styles.xml 中定义了这两种样式,你会得到编译错误 - 因为 values/styles.xml 是为所有 api 版本编译的,而 2.3 不知道 android:actionBarStyle。

因此您可以复制您的样式。 有一个 values/styles.xml 和一个 values-v14/styles.xml

在 api 14 及以上设备上运行时,values-v14/styles.xml 中的样式将覆盖 values/styles.xml 中的任何样式。

或者您可以将所有样式保留在一个 values/styles.xml 中,但是在您遇到错误的属性上,将 tools:targetApi="14" 添加到标签中,这会告诉编译器忽略这一点在非 api 14 设备上。

例如

<item name="android:actionBarStyle" tools:targetApi="14">@style/MyActionBar</item>

【讨论】: