1

我使用 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>

4

1 回答 1

2

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>
于 2013-11-04T19:32:20.027 回答