前言
Android 4.4(API 19)之后,就提供了修改状态栏颜色的方法,但是在 Android 6.0(API 23)之后,才支持修改状态栏上面的文字和图标颜色,默认是白色的。所以会导致一个问题,在 4.4 到 6.0 之间的系统,状态栏设置为浅色的话,状态栏上面白色的文字和图标会看不清
有一些第三方的系统提供了设置状态栏和状态栏文字、图标颜色的方法,比如小米的MIUI和魅族的Flyme,所以考虑了下比较好的实现方式是:
- Android 4.4 以上使用 SystemBarTint 修改状态栏颜色;
- Android 6.0 以上使用系统方法修改状态栏字体、图标颜色;
- Android 4.4 到 6.0 之间使用第三方系统提供的方法修改状态栏字体、图标颜色(目前只有 MIUI 和 Flyme)。
当然,这里面也会有坑,比如 MIUI 提供的修改状态栏字体颜色方法会跟 Android 系统自带的方法冲突,官方说明如下: 关于MIUI状态栏字符颜色逻辑调整说明
经过网上的资料和自己的尝试,MIUI 系统还是同时使用 MIUI 提供的方法和 Android 系统自带的方法来修改状态栏字体颜色比较保险。
基于上面的思考,封装了设置 Android 4.4 以上系统状态栏颜色和状态栏字体、图标颜色的方法:
首先,需要引入 SystemBarTint 库:
1 | dependencies { |
隐藏标题栏
1 | <!-- Base application theme. --> |
要在 Application Theme 加上
1 | <item name="android:fitsSystemWindows">true</item> |
不然页面会顶到状态栏上面,
或者
在 Activity 的布局里面加上
1 | android:fitsSystemWindows="true" |
也可以。
工具类
状态栏工具类 StatusBarUtil.java
1 | import android.annotation.TargetApi; |
设备系统工具类 OSUtil.java
1 | import android.os.Environment; |
在 Activity 里面调用:
1 | //根据状态栏颜色来决定状态栏文字用黑色还是白色 |
最终实现的效果如下: