status-bar-compat
Introduction: A compatible library for setting status bar color. Support MIUI, Flyme, EMUI3.1. 完美兼容小米,魅族,华为……
Tags:
简介
StatusBarCompat 是一个用于设置系统状态栏颜色的兼容库,兼容 Android 4.4.2(API 19)以上,使用简单,仅需要一行代码的调用。
效果展示

使用方式
声明仓库
确保在你的根项目的 build.gradle 中对jcenter的声明:
allprojects {
repositories {
jcenter()
}
}
声明依赖
在你要使用的 module 的build.gradle文件中声明以下依赖:
compile 'com.githang:status-bar-compat:0.7'
代码调用
最后在你的 Activity 的setContentView()方法调用之后,调用以下方法即可。
StatusBarCompat.setStatusBarColor(this, color, lightStatusBar);
或者是
StatusBarCompat.setStatusBarColor(this, color);
API 文档
API 文档参见:https://msdx.github.io/status-bar-compat/
适配支持情况
第三方 ROM 适配支持
| ROM | 适配说明 |
|---|---|
| MIUI | 调用小米的 API 适配 |
| Flyme | 调用魅族 API 适配,并且增加不主动设置可能不兼容的 Flyme 的状态栏的 API |
| EMUI3.1 | 对于 6.0 以下 5.0 及其以上的 EMUI,使用 4.4.2 的方式来处理(EMUI3.1 无法使用 5.0API 设置) |
设置失败的机型
| 型号 | 系统版本 | 备注 |
|---|---|---|
| 高通 Andriod L Device1 | 4.4.4(SDK 19) | 状态栏还是为黑色 |
深色状态栏图标设置支持
- Android 6.0 及以上
- Flyme
- MIUI
6.0 以下的其他机型因未提供相关 API 可以把状态栏图标设置为黑色,所以无法支持。请不要再提不在上述范围的手机无法设置深色图标的 issue 了。
已知的设置状态栏为白色后看不清时间的机型
把状态栏设置为白色或接近白色的颜色可能导致部分机型看不清状态栏的图标与文字,原因是这些机型把设置状态栏半透明改成了全透明,而 Android 6.0 以下没有官方的 API 可以把状态栏的图标及字体设置为深色,需要定制的 ROM 自己提供 API 支持。因此,不建议把状态栏设置为白色或接近白色的颜色。
目前已知的提供了支持的 ROM 有 MIUI 以及 Flyme。以下是已知的不支持的机型列表:
| 型号 | 系统版本 | 备注 |
|---|---|---|
| 华硕 K010 | 4.4.2(SDK 19) | 白色字体但有阴影 |
| Lenovo TAB S8-50F | 4.4.2(SDK 19) | 完全看不到时间 |
| 联想 A936 | 4.4.4(SDK 19) | 同上 |
| 联想 K80M | 4.4.4(SDK 19) | 同上 |
以上具体机型测试结果根据在 Testin 上随机兼容性测试所得,测试报告地址:http://realauto.testin.cn/s/1amaujufn
已知问题
- 由于低于 6.0 以下的系统使用透明状态栏并设置
fitsSystemWindows来实现设置状态栏颜色,在一些底部虚拟导航栏给隐藏的机型上,可能会出现界面无法显示在该区域中。如果遇到此问题,你需要把你的 App theme 指定为 AppCompat 里的一种。 - 可能会出现状态栏与标题栏之间有一个与状态栏同样大小的间距,如果出现请调用以下代码:
StatusBarCompat.resetActionBarContainerTopMargin(getWindow(), android.support.v7.appcompat.R.id.action_bar_container);
