Android Custom actionBarStyle兼容性错误

时间:2014-12-25 13:17:06

标签: android android-layout android-actionbar android-actionbar-compat

我正在尝试学习如何在Android中开发,我正在学习本教程:https://developer.android.com/training/basics/actionbar/styling.html

现在,我正在尝试将操作栏的背景设置为橙色。 本教程提供了以下代码(请注意,我正在使用Android 2.1兼容性进行开发,因此我正在使用AppCompat等等)

<?xml version="1.0" encoding="utf-8"?>
<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> <!-- error here -->

        <!-- 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>
</resources>

我的 actionbar_background.xml 文件是:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#FFA500" />
</shape>

我的问题是我在添加评论android:actionBarStyle requires API level 11 (current min is 8)的行中收到以下错误:<!-- error here -->

我找到的解决方案是删除该行。另外,因为它看起来与下面的行完全相同(除了没有明确说明'android:'命名空间)。一切似乎现在都有效......

我想知道这是教程代码中的错误(即我删除该行是正确的)或者我是否有其他类型的问题......任何想法?谢谢!

修改

以下帖子解决了同样的问题:Android AppCompat requires API level 11

这似乎确实是教程本身的一个错误。但是,仍然不清楚,为什么问题发生在 android 命名空间(应特别关注API&gt; 14)而不是默认一个(应该解决任何其他API)。

1 个答案:

答案 0 :(得分:1)

这是因为AppCompat主题仅在sdk 11中可用。您需要更改主题或者您应该将Manifest文件中的min sdk版本从8更改为11.

<uses-sdk
    android:minSdkVersion="8"/>

<uses-sdk
        android:minSdkVersion="11"/>

修改

你必须只使用:

<!--For Api 8-->
<item name="actionBarStyle">Style ref </item> 
<!--For Api 11 or more-->
<item name="android:actionBarStyle">Style ref </item> 

因为你可以得到错误,你只能在API LEVEL 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+