您的位置:首页 > 其它

实现4.4以上的状态栏变色

2016-03-03 17:33 316 查看
文/BlackSwift(简书作者)

原文链接: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;
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: