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>

注意&lt;resources&gt; 标记中的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

【讨论】:

如何同时使用它们.. @style/Widget.Styled.ActionBar@style/Widget .Styled.ActionBar 嗨,您能回答我如何更改与默认图标不同的操作栏图标...?我尝试了一些代码,但没有成功 getSuppostActionBar().setIcon(R.drawable.my_new_icon); 是的,我试过了,但我无法将操作栏图标的背景设置为透明,而且我的活动有自定义背景,所以它的背景是应用颜色而不是操作栏颜色 你能发布一些你得到的结果的图片吗,因为我不确定我是否正确【参考方案3】:

您可以在 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的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要urlEncode

我需要做一个android新闻客户端需要哪些知识

测试在公司和哪些人员来对接,需要看哪些文档,需要写哪些东西

如果其他模块需要,根 composer 文件中是不是需要 phpunit?

微信小程序需要啥知识

需要人陪