如何在所有Android版本中使用样式属性为状态栏着色?

时间:2015-05-24 15:00:18

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

这是styles.xml

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/accent</item>
    <!-- Other attributes -->
</style>

虽然这是v21 styles.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:colorPrimary">@color/primary</item>    
    <item name="android:colorPrimaryDark">@color/primaryDark</item>
    <item name="android:colorAccent">@color/accent</item>
</style>
</resources>

我正在使用那个父主题,因为在activity.java中我正在创建工具栏并将其设置为活动的工具栏

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
    setSupportActionBar(toolbar);
}

在Lollipop版本上它很好但是当我在API低于v21的设备上部署时它根本不工作,我仍然看到黑色状态栏和primaryDark完全被忽略。这是正确的方式吗?

1 个答案:

答案 0 :(得分:1)

  

在Lollipop版本上它很好但是当我没有时它根本不起作用   部署在API低于v21的设备上,我仍然看到黑色   状态栏和primaryDark完全被忽略。这是对的   方式是什么?

所有pre-lolipop设备都会忽略您的主要黑暗,因为这是Android Lolipop(5.0+)以来的一项功能。状态栏是操作系统拥有的系统窗口。在5.0之前的Android设备上,应用程序无权更改其颜色,这不是AppCompat库可以更改的内容。

KitKat上有一个“hack”,如here

所述

您需要使状态栏变得透明

<item name="android:windowTranslucentStatus">true</item>

您需要将其应用于工具栏以使状态栏更暗

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    ...
    android:fitsSystemWindows="true"/>

您还可以观看this video

我担心尝试改变预装KitKat设备的颜色是不可能的,我很乐意纠正。