如何在所有 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 之前的设备上更改颜色是不可能的,但我很乐意得到纠正。
这是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 之前的设备上更改颜色是不可能的,但我很乐意得到纠正。