美文网首页Android UIAndroid知识
android案例---透明状态栏

android案例---透明状态栏

作者: return_toLife | 来源:发表于2018-07-05 17:18 被阅读91次

    想要实现的效果:

    微信图片_20171107222158.png
    1. 设置透明状态栏
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            }
    

    设置之后虽然状态栏隐藏了,但是状态栏的高度被填充了(少了状态栏的高度),如下:


    11.jpg
    1. 解决步骤一,使用fitssystemwindows预留系统空间,也可以在xml的根布局里设置
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                //透明状态栏
                activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.getWindow().findViewById(android.R.id.content)).getChildAt(0);
                //预留系统空间
                rootView.setFitsSystemWindows(true);
                //绘制区域在padding里面
                rootView.setClipToPadding(true);
            }
    

    设置预留系统空间之后,用的是小米5s手机,状态栏变成白色,效果如下:


    222.png
    1. 继续解决问题,加入一个自定义系统状态栏,获取系统状态栏高度,设置其背景颜色和自定义bar背景一致
     /**
         * 为activity添加状态栏颜色
         *
         * @param activity
         * @param color
         */
        public static void addStatusViewWithColor(Activity activity, int color) {
            //获取contentview布局
            ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
            //新建一个new
            View statusBarView = new View(activity);
          //设置宽高
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    getStatusBarHeight(activity));
            statusBarView.setBackgroundResource(color);
            contentView.addView(statusBarView, lp);
        }
    
        /**
         * 获取状态栏高度
         *
         * @param activity
         * @return
         */
        public static int getStatusBarHeight(Activity activity) {
            int result = 0;
            //获取状态栏高度的资源id
            int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0) {
                result = activity.getResources().getDimensionPixelSize(resourceId);
            }
            return result;
        }
    

    更多透明状态栏内容参考

    http://www.jianshu.com/p/aca4fd6743b1

    相关文章

      网友评论

        本文标题:android案例---透明状态栏

        本文链接:https://www.haomeiwen.com/subject/oaesmxtx.html