实现4.4以上的状态栏变色

本文提供了一种简洁高效的方法,仅需一行代码就能在Android应用中实现沉浸式状态栏处理,包括状态栏透明化、字体颜色调整等功能,适用于不同版本的Android系统,特别适用于处理状态栏字体颜色和透明状态栏。
文/BlackSwift(简书作者)
原文链接:http://www.jianshu.com/p/4f71b98dd6f9
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

本文是目前最好的方案,没有之一,不需要借助开源库手动在viewgroup(and roid.R.id.content)中塞一个丑陋的填充view,也不用设置任何复杂的xml,直接一行全部搞定


本文章适用于:

  1. 处理4.4以上的沉浸
  2. 处理6.0以上的沉浸与字体颜色,5.0只可以处理沉浸而不能改字体颜色(故不建议用白色背景)
  3. 调用私有API处理小米魅族的状态栏字体颜色
  4. 获取状态栏高度
  5. 状态栏背景取决于你的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;
    }
  });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值