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

How to color the status bar with styles attributes in all Android versions?

这是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 中,我正在创建工具栏并将其设置为 activity

的工具栏
@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 被完全忽略。方法对吗?

On Lollipop versions it's fine but it's not working at all when I deploy on a device with API lower than v21, I still see the black status bar and the primaryDark is totally ignored. Is it the right way?

在所有 lolipop 之前的设备上都会忽略您的主要暗色,因为这是自 Android Lolipop (5.0+) 以来的功能。状态栏是操作系统拥有的一个系统window。在 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 之前的设备上更改颜色是不可能的,但我很乐意得到纠正。