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.
在为应用程序编写 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.