Android - 无法设置支持 API 16 到 22 的 ActionBar 样式

Android - Can't style ActionBar supporting API 16 to 22

在为应用程序编写 Spike 代码时,我想做一个简单的 ActionBar 样式,它向后兼容 4.1,同时在较新版本中支持 Material。因此我继承自 Theme.AppCompat.Light。 使用新的 Material 颜色约定,我有这个 colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="primary" type="color">#b56cb5</item>
    <item name="primary_dark" type="color">#663d66</item>
    <item name="accent" type="color">#ffffff</item>
</resources>

values/style.xml 定义如下:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/CustomActionBar</item>
</style>

<!-- ActionBar styles -->
<style name="CustomActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/primary</item>
</style>

在 AppTheme 中定义 Material 项时,Android Studio 方便地为我生成了 values-21/style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/primary</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:colorAccent">@color/accent</item>
    <!-- action bar item to support older versions -->
    <item name="android:actionBarStyle">@style/CustomActionBar</item>
</style>

<!-- ActionBar styles -->
<style name="CustomActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/primary</item>
</style>

Manifest 也正确应用了我的 AppTheme:

<application
        (...)
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            (...)
        </activity>
</application>

这一切看起来都不错。然而,这是我在 5.0.2 (API 21):

上 运行 应用程序时得到的结果

我什至懒得在我的 4.4.2 设备上进行测试。我究竟做错了什么?网上的所有教程似乎都在做我所做的。

请在此处遵循最新的 Material 设计指南:

http://www.google.com/design/ and https://developer.android.com/design/material/index.html.

您可以使用 AppCompatv7 来支持从 API 7 到 API 22+ 的所有设备。

Google 开发者 Chris Banes 解释了如何实现它:

https://chris.banes.me/2014/10/17/appcompat-v21/

和官博post:

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html.