实现沉浸式状态栏

Android从4.4的版本开始,就可以自己来定义状态栏的颜色了,下面,我们来看一下实现方式:
1:沉浸式状态栏的实现方式:

/**
     * 设置状态栏的颜色
     * 分为两种情况
     * 1:当当前SDK版本在5.0及其以上版本中,直接设置状态栏颜色就可以(有对应的方法)
     * 2:当当前SDK版本在4.4到5.0之间时,则需要向设置当前状态栏为全屏,
     * 然后给其添加一个与StatusBar同等高度的View并设置padding值来处理
     * @param activity
     * @param color
     */
    public static void setStatusBarColor(Activity activity,int color){
        //1:SDK>=5.0
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            activity.getWindow().setStatusBarColor(color);
        }
        //2:SDK>=4.4
        else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            //1:先将其设置成全屏模式  但是电量  信号条还得存在

            //该设置会导致不显电量等图标
            //activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            //2给跟布局添加一个view
            View view = new View(activity);
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity));
            view.setLayoutParams(params);
            view.setBackgroundColor(color);

            ViewGroup mDecor = (ViewGroup) activity.getWindow().getDecorView();//FrameLayout
            mDecor.addView(view);

            //3:获取setContentView中的更布局  给其设置statusBar的padding值 或者设置其属性fitSystemWindows
            ViewGroup content = (ViewGroup) activity.findViewById(android.R.id.content);
            //content.getChildAt(0).setPadding(0,getStatusBarHeight(activity),0,0);
            ViewGroup rootView = (ViewGroup) content.getChildAt(0);//我们写的布局的根布局
            rootView.setFitsSystemWindows(true);

        }
    }
    public static int getStatusBarHeight(Activity activity) {
        Resources resources = activity.getResources();
        int statusBarHeightId = resources.getIdentifier("status_bar_height","dimen","android");
        int statusBarHeight = resources.getDimensionPixelOffset(statusBarHeightId);
        Log.i("JUSTH","statusBarHeight ----->"+statusBarHeight);
        return statusBarHeight;
    }

上面就是实现的方法了,在实现的时候,我们需要判断当前手机的版本,如果在5.0及以上版本,是直接有方法来设置的。如果是介于4.4到5.0之间的版本,那就需要通过创建一个与statusBar等高的View来占位设置了!
最后:上一张效果图:(设置了比较明显的颜色,能够看得更清楚些)

这里写图片描述

2:下面,我们来看一下另外一种情况:
有的时候,为了界面美观以及一些其他原因,会有如下需求:

这里写图片描述
可以看到的是,我们这里已经全屏显示了,但是,电量型号等图标还是显示的,这种情况下,直接设置当前界面为全屏是不能够满足这种需求的:
下面,来看一下实现方法:

//设置屏幕为全屏且显示手机电量等图标
    public static void setActivityTranslucent(Activity activity){
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //当SDK大于等于5.0时,则获取到DecorView并设置SystemUiVisibility属性
            View mDecor = activity.getWindow().getDecorView();
            mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

这个情况正好和沉浸式状态栏的相反,在sdk版本在4.4-5.0之间,有直接的设置方法,而在5.0以上,需要我们自己来实现,实现过程为,首先,获取到当前Activity的decorView,然后,给decorView设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN该属性,然后再将状态栏的颜色设置为透明色!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值