Android 沉浸式状态栏

Posted DullFan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 沉浸式状态栏相关的知识,希望对你有一定的参考价值。

文章目录


前言

4-20分享


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

先来看下效果图(夜神模拟器和真机有点差别,我不会搞gif动图,就勉强看下吧):

一、沉浸式状态栏

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

	//使用
	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沉浸式状态栏完全解析

Android 实现沉浸式状态栏

Android---沉浸式状态栏

高大上的Android沉浸式状态栏?

android实现沉浸式状态栏

Android状态栏微技巧,真正理解沉浸式模式