修改4.1-5.0 5.0-6.0 6.0及以上状态栏文字图标的颜色设置(不包括小米,魅族,oppo,后续会更新)

在项目开发中,有的地方需要沉浸式的状态栏,而且会遇到底部TAB切换时,不同fragment中顶部状态栏颜色不一致的需求,这样一来,假设我们设置Afragment状态栏为白色,那么其中的文字图标将会看不见,所以经过整理和小方面的适配,将自己知道的贴出来给大家共享

话不多说,直接贴代码

1.首先我的项目里是要设置状态栏颜色的,所以先设置颜色

/*
    * 修改状态栏颜色
    * */
    public void setWindowStatusBarColor(Activity activity, int colorResId,boolean dark) {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(activity.getResources().getColor(colorResId));

                //底部导航栏
                //window.setNavigationBarColor(activity.getResources().getColor(colorResId));
            }
            setAndroidNativeLightStatusBar(activity,dark);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

注:其中boolean值是根据你设置的颜色来决定的,如果要设置状态栏颜色为白色,就为true,下面的代码中有描述

2.第二步,设置不同状态栏颜色下,文字和图标的颜色

/*
    * 修改不同状态栏颜色中的文字及图标颜色
    * */
    private void setAndroidNativeLightStatusBar(Activity activity, boolean dark) {
        View decor = activity.getWindow().getDecorView();
        //dark 为状态栏白色时等于true
        //增加下面两个flag时会将顶部状态栏与布局重叠到一起  android:fitsSystemWindows="true"   在布局根节点加入此行代码
        if (dark) {
            //设置状态栏分别为白色黑字、灰色白字、暗色白字
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                //6.0以上可以通过直接设置SYSTEM_UI_FLAG_LIGHT_STATUS_BAR属性即可。
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().setStatusBarColor(Color.GRAY);  //21以上不支持6.0直接设置的方法,可用灰色代替,具体可自己设置
                //getWindow().setStatusBarColor(Color.parseColor("#40000000"));
            } else  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//4.4版本本身就含有暗色阴影,不作其他处理即可
            }
        } else {
            //设置状态栏文字颜色分别为默认白色,只是修改状态栏颜色
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                //6.0以上可以通过直接设置SYSTEM_UI_FLAG_LAYOUT_STABLE属性即可。
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimary));  //21以上不支持6.0直接设置的方法,具体可自己设置颜色
                //getWindow().setStatusBarColor(Color.parseColor("#40000000"));
            } else  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//4.4版本本身就含有暗色阴影,不作其他处理即可
            }
        }
    }

注:在设置状态栏全透明后,整个activity布局都会上移充满整个屏幕,如果你不想让布局上移的话就需要在根布局设置

android:fitsSystemWindows="true"

第一个 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  并拓展几个常用的flag

1.View.SYSTEM_UI_FLAG_VISIBLE :状态栏和Activity共存,Activity不全屏显示。也就是应用平常的显示画面

2.View.SYSTEM_UI_FLAG_FULLSCREEN :Activity全屏显示,且状态栏被覆盖掉

3.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN :Activity全屏显示,但是状态栏不会被覆盖掉,而是正常显示,只是Activity顶端布   局会被覆盖住

4.View.INVISIBLE : Activity全屏显示,隐藏状态栏

我们用到的就是第三个,至于更深入的研究就交给你们了

第二个 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR  官方在Android6.0中提供了亮色状态栏模式

第三个 SYSTEM_UI_FLAG_LAYOUT_STABLE 给出链接,你们自行观看吧我也有点解释不清楚

http://www.jcodecraeer.com/a/anzhuokaifa/developer/2014/1117/1997.html

虽然也是东拼西凑来的,可自己确实验证过,希望能帮到你们,搞个原创也还可以吧~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值