Android 沉浸式状态栏

文章目录

  • 前言
  • 一、沉浸式状态栏
  • 二、改变标题和状态栏颜色
  • 总结


前言

4-20分享


提示:以下是本篇文章正文内容,下面案例可供参考

先来看下效果图(夜神模拟器和真机有点差别,我不会搞gif动图,就勉强看下吧):
Android 沉浸式状态栏_第1张图片
Android 沉浸式状态栏_第2张图片

一、沉浸式状态栏

以下就是代码,加上一些自己的理解:

	//使用
	fullScreen(getActivity());
	//封装成方法
	//通过设置全屏,设置状态栏透明
    private static void fullScreen(Activity activity) {
     
        //判断版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     
                //5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色
                Window window = activity.getWindow();
                //获取顶级视图
                View decorView = window.getDecorView();
                //两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
                int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                //FLAG_TRANSLUCENT_STATUS 透明状态栏
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                //添加标志,应该是背景图
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                decorView.setSystemUiVisibility(option);
                //设置状态栏颜色
                window.setStatusBarColor(Color.TRANSPARENT);
            } else {
     
                //获得窗口
                Window window = activity.getWindow();
                //获得布局属性
                WindowManager.LayoutParams attributes = window.getAttributes();
                //好获得状态栏颜色
                int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
                attributes.flags |= flagTranslucentStatus;
                //设置颜色
                window.setAttributes(attributes);
            }
        }
    }
}

二、改变标题和状态栏颜色

代码如下(示例):

 //@RequiresApi的作用仅仅是让编译通过
    @RequiresApi(api = Build.VERSION_CODES.M)
    private void initTitle() {
     
        //addNum:控制标题在什么位置完全显示
        int addNum = 200;
        int Max = 255 + addNum;
        int MIn = 0 + addNum;
        NestedScrollView home_scrollview = mView.findViewById(R.id.home_scrollView);
        RelativeLayout relativeLayout = mView.findViewById(R.id.home_relativeLayout);
        //设置标题背景颜色
        relativeLayout.setBackgroundColor(getResources().getColor(R.color.purple_500));
        //将标题背景透明度设置为0
        relativeLayout.getBackground().setAlpha(0);
        //ScrollView滚动动监听
        home_scrollview.setOnScrollChangeListener(new View.OnScrollChangeListener() {
     
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
     
                //渐变主题的核心
                if (scrollY <= Max && scrollY >= MIn) {
     
                    relativeLayout.getBackground().setAlpha(scrollY - MIn);
                }
                //Y轴大于或者等于Max的话标题透明度完全显示
                if (scrollY >= Max) {
     
                    relativeLayout.getBackground().setAlpha(255);
                }
                //Y轴小于或者等于0的话标题透明度完全不显示
                if (scrollY <= 0) {
     
                    relativeLayout.getBackground().setAlpha(0);
                }
            }
        });
    }

总结

以上就是今天要讲的内容,

你可能感兴趣的:(沉浸式状态栏,Android,android,安卓)