Android沉浸式全面讲解(一)

1.前言

  一直以来对导航栏沉浸式模式一直停留在比较基础的阶段,趁这段时间查漏补缺。浏览网上许多所有沉浸式的文章,现在自己来总结一下我所学到的知识点,方便我之后用到的时候,能够快速利用起来。

2.沉浸式是什么?

  看了许多文章,我来大概总结一下,就是想要通过透明或改变颜色等方式改变状态栏的展示形式。

3.改变状态栏颜色

  3.1.状态栏默认颜色

    3.1.1 Android5.0以下默认都是黑色的

      效果展示:
              在这里插入图片描述

    3.1.2.Android5.0以上是有颜色的,系统帮我们做了处理

      默认显示的颜色是:res —> values —> colors —>colorPrimaryDark

      效果展示:
              在这里插入图片描述

  3.2. 如何改变状态栏颜色

   3.2.1 Android5.0以下方案
		   /**
             * Android4.4 - 5.0之间改变状态栏颜色
             * 思路:
             *      1.将我们页面设置为全屏(设置为全屏我们的导航栏就没有了,所有数据都会顶在屏幕顶部)
             *      2.获取到我们的activity的根视图Decorview,大家可以去看一下布局的加载流程setContentView
             *      3.创建一个View,高度为我们导航栏高度,将View添加到我们的DecorView中,给View设置颜色就可以
             */
            //1.将我们页面设置为全屏 这个是存在电量 时间等信息
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //这个是完全全屏,时间,电量信息都没有
            //activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

            //2.在状态栏添加一个布局,添加到DecorView根布局
            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
            
            //3.创建一个View,高度就是我们状态栏的高度
            View view = new View(activity);
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity));
            view.setLayoutParams(params);
            view.setBackgroundColor(color);
            decorView.addView(view);
	/**
     * 获取状态栏高度,
     *  获取其他资源包下的资源
     *      1.先获取资源
     *      2.获取资源id
     *      3.根据id获取资源
     * @return
     */
    private static int getStatusBarHeight(Activity activity) {
        //1.先获取资源
        Resources resources = activity.getResources();
        /**
         * 2.获取资源id
         * status_bar_height    属性值
         * dimen    属性类型
         * android  包名
         */
        int statusBarHeightId = resources.getIdentifier("status_bar_height","dimen","android");
        //3.根据id获取资源值
        return resources.getDimensionPixelOffset(statusBarHeightId);
    }

      效果展示:
              在这里插入图片描述
解决文字不显示:fitsSystemWindows属性

Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.

  • 这是官方的解释,大致意思就是我们在布局的最外层设置 android:fitsSystemWindows=“true”,会在屏幕最上方预留出状态栏高度的padding。所以我们只需要在我们的布局文件中添加该属性就可以了
    在这里插入图片描述
    注意:这样我们每次创建页面都要添加fitsSystemWindows属性,这样太麻烦了,我们可以通过代码设置一次就可以,但我们需要了解布局加载流程

         View加载流程图
               在这里插入图片描述
    下面两种方法解决:

	  /**
		*第一种方案:
		*	1.获取系统布局文件,
		*	2.调用getChildAt(0)第一个孩子,也就是我们的布局文件,
		*	3.在调用setFitsSystemWindows
		*/
             //1.获取我们布局文件的父类
            ViewGroup viewGroup = activity.findViewById(android.R.id.content);
             //2.获取我们的布局文件
            View activityView = viewGroup.getChildAt(0);
            activityView.setFitsSystemWindows(true);
      /**
		*第二种方案:
		*	1.获取系统布局文件,
		*	2.设置Padding,top为我们的状态栏高度
		*/  
          	ViewGroup viewGroup = activity.findViewById(android.R.id.content);
			viewGroup.setPadding(0,getStatusBarHeight(activity),0,0);

      效果展示:
              在这里插入图片描述

   3.2.2 Android5.0以上方案

       只需设置:activity.getWindow().setStatusBarColor(color);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值