android:actionBarStyle 需要 API 级别 11
Posted
技术标签:
【中文标题】android:actionBarStyle 需要 API 级别 11【英文标题】:android:actionBarStyle requires API level 11 【发布时间】:2013-02-26 15:54:33 【问题描述】:在 xml 中使用 ActionBarSherlock
时:
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
我收到了这个错误:
android:actionBarStyle requires API level 11 (current min is 8) error
我正在使用它来将我的带有操作栏的应用程序反向移植到 2.2 设备。
如何同时使用它们:
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
【问题讨论】:
actionbarsherlock.com/theming.html 我更喜欢使用tools:targetApi="11"
的方案
【参考方案1】:
另一个选择是使用tools:targetApi
属性,它需要tools
命名空间。这与您可以在 java 文件中使用的 @TargetApi
注释类似。
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="MyThemes.MyTheme">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle" tools:targetApi="11">@style/Widget.Styled.ActionBar</item>
</style>
</resources>
注意<resources>
标记中的xmlns:tools="http://schemas.android.com/tools"
,因为它是必需的。
【讨论】:
这是否仅针对 API 11 或 API >= 11? @psoft APIs >= 11。它有效地告诉 Lint 检查器将该项目视为最小 API 为 11,而不是您在清单中设置的任何内容。 我不知道为什么你的答案没有更多的赞成票,这比制作一堆不同的文件要容易得多。 @psoft 可能是因为这个问题已经超过 2 年了 :) Fish:这很奇怪。我在许多不同的设备和 API 上使用它都没有问题。 @Pacerier 不同的是您不需要创建 values-11 文件夹并维护多个 styles.xml 文件。我个人更喜欢这个解决方案,因为它更简单。【参考方案2】:你只能使用:
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
因为您可能会收到错误消息,所以您在 API 级别 11 上可以使用 android:actionBarStyle
。
如果您希望将ActionBar
的样式设置为在所有 API 级别中看起来都相同,则需要为所选 API 级别创建不同的文件夹,并在这些文件夹中创建新的 style.xml
/themes.xml
文件。
例如:
- res
-- values
-- styles.xml
-- themes.xml // API LEVEL 8+
-- values-v11
-- styles.xml
-- themes.xml // API LEVEL 11+
-- values-v14
-- styles.xml
-- themes.xml // API LEVEL 14+
我能想到的第二件事是小心你在不同的 API 级别将哪些主题包含到你当前的主题中。
例如,对于 API 级别 8:您将使用 @style/Theme.Sherlock.Light.DarkActionBar
,而您只能使用 actionBarStyle
。在为 API 级别 14+ 设计操作栏时,您不需要 actionBarStyle
,因为您可能会将 Holo.Light
主题设置为当前主题的父主题,因此在这种情况下您将不得不使用 android:actionBarStyle
。
【讨论】:
如何同时使用它们..您可以在 Eclipse 中选择错误,然后按“删除”键。 然后只需运行该项目,它就会工作。
每次修改 XML 时都会删除这些错误。
【讨论】:
有趣,但它确实适用于快速破解,您不想在项目中搞砸。【参考方案4】:这取决于您要定位的 SDK 版本:
目标设计低于 11:
在您的AndroidManifest.xml
使用:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="x" android:maxSdkVersion="10"/>
x 8-10 之间的任何值(取决于您的代码)
根据您的风格使用:
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
定位任何设备:
在您的AndroidManifest.xml
使用:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
ActionBarSherlock
示例中使用的 16 可以大于或等于 11(取决于您的代码)
根据您的风格使用两者:
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
第一个用于ActionBarSherlock
主题,第二个用于在已经支持ActionBar
的android 设备中使用相同的主题
编辑: 清除 Lint 警告(可能出现的 XML 文件中的红色下划线):
【讨论】:
没错,但在同一个文件中使用两者是不可能的,因为它会给你错误的 min required sdk version of 11 !! @tobias 我也使用了选中的答案(***.com/a/15339215/944070)! 感谢您的回复!您是否知道取消选中 lint 警告的方法是否存在缺点? lint 错了吗? 我猜 Lint 会发出警告(查看它的偏好,一些警告会生成为错误)操作系统版本中无法识别代码,但只要 Android xml 旨在忽略无法识别的语句(如果可能)它仍然可以正常工作。所以 lint 是对的,下划线的代码是未知的,但在运行时仍然可以忽略! :) // 这就是我的方法,为什么它基于忽略 xml 未知标签的事实而工作(我在某处读过它,不记得 src,或者所有应用功能的情况。)以上是关于android:actionBarStyle 需要 API 级别 11的主要内容,如果未能解决你的问题,请参考以下文章