文/BlackSwift(简书作者)
原文链接:http://www.jianshu.com/p/4f71b98dd6f9
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

原文链接:http://www.jianshu.com/p/4f71b98dd6f9
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
本文是目前最好的方案,没有之一,不需要借助开源库手动在viewgroup(and roid.R.id.content)中塞一个丑陋的填充view,也不用设置任何复杂的xml,直接一行全部搞定
本文章适用于:
- 处理4.4以上的沉浸
- 处理6.0以上的沉浸与字体颜色,5.0只可以处理沉浸而不能改字体颜色(故不建议用白色背景)
- 调用私有API处理小米魅族的状态栏字体颜色
- 获取状态栏高度
- 状态栏背景取决于你的Toolbar
另外提供Toolbar的高度自动适配作为参考
关键词: Kitkat
,Lollipop
,状态栏字体
,沉浸状态栏
,透明状态栏
,Translucent statusbar
,Transparent statusbar
,statusbar text color
本文的沉浸是广义上的,特指statusbar与Activiy的windows重叠到一起,而且背景是透明的,而且电池等图标可见
截图

Flyme 4.4
方法一:状态栏的使用
在Activity中设置如下即可,注意xml/style中不用写任何关于状态栏的属性(特别是fitsSystemWindows这个属性),直接拿来用就可以
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StatusbarUtils.from(this)
//沉浸状态栏
.setTransparentStatusbar(true)
//白底黑字状态栏
.setLightStatusBar(true)
//设置toolbar,actionbar等view
.setActionbarView(mNavigationBar)
.process();
}
方法二:view的单独使用
下面代码是在4.4以上自动增长了状态栏的高度,需要在xml中加入windowIsTranslucent
属性即可。
//某个View的构造函数中的调用
public void setFitTranslucent(final boolean translucent) {
post(new Runnable() {
@Override public void run() {
if (StatusbarUtils.isLessKitkat() || !translucent) {
return;
}
int height = StatusbarUtils.getStatusBarOffsetPx(getContext());
setPadding(getPaddingLeft(), height + getPaddingTop(), getPaddingRight(), getPaddingBottom());
getLayoutParams().height += height;
}
});
}