保持与Material Design的向后兼容性

时间:2015-05-06 23:27:22

标签: android android-5.0-lollipop material-design backwards-compatibility

我正在尝试实施具有Material Design着色标题栏的活动。

我的标准风格是:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>

我的v21风格是:

<style name="AppTheme" parent=" -see rest of this post- ">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
    <item name="android:colorAccent">@color/accent</item>
</style>

我得到的结果是:

API 18:
MyActivity extends AppCompatActivity
-- Black title bar, this is good enough.
MyActivity extends Activity:
-- No title bar.
API 21:
MyActivity extends Activity, parent="android:Theme.Material.Light"
-- Perfect green tinting of status bar and title bar.
MyActivity extends AppCompatActivity, parent="android:Theme.Material.Light"
-- Crashes with: You need to use a Theme.AppCompat theme (or descendant) with this activity.
MyActivity extends AppCompatActivity, parent="Theme.AppCompat.Light"
-- Status bar is correctly green tinted. Title bar has no background colour.
MyActivity extends AppCompatActivity, parent="Theme.AppCompat.Light.DarkActionBar"
-- Status bar is correctly green tinted. Title bar has black background colour.

如何获得Lollipop中的彩色标题栏和Lollipop前可接受的标题栏?我知道额外的工作我可以有一个彩色的棒棒糖前标题栏,但目前不需要。

2 个答案:

答案 0 :(得分:3)

您应该将非android命名空间属性与支持库一起使用:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

不需要v21版本。这将为您提供一致的API级别7行为

答案 1 :(得分:2)

如果您使用的是AppCompat,那么所有material color palette属性(例如colorPrimary)都可用于所有API级别,因此您可以编写单个主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

根据AppCompatActivity使用Consistent Design with AppCompat DevByte进行所有活动。这将为您提供所有API7 +设备上colorPrimary的操作栏,API21 +设备上的状态栏colorPrimaryDark(旧设备不支持彩色状态栏),以及操作栏上的浅色文字(使用Theme.AppCompat.Light如果你想在你的操作栏上留下深色文字。)