沉浸式状态栏实践

最近有几个项目遇到了沉浸式状态栏的项目,可是使用都不顺利,可是这个问题又不是特别难,网上各类解决方案一大堆,此处来实践一番!
首先,针对网上的针对Android 4.4以上的系统,使用这个代码:android

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }

效果以下图:
这里写图片描述web

针对这种状况,咱们须要在 xml 布局中设置 android:fitsSystemWindows=”true” 可是设置在跟布局仍是设置给根布局下的Toolbar?测试看看效果:
根部局:
这里写图片描述
Toolbar:
这里写图片描述windows

fitSystemWindows官方描述: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.
简单描述:这个属性的做用是让view能够根据系统窗口(如status bar)来调整本身的布局,若是值为true,就会调整view的paingding属性来给system windows留出空间(即给view添加一个值为状态栏高度的top padding)。svg

此时我知道了为何我以前实现沉浸式的时候,上边的距离老是清除不了!接下来继续,解决 Android 5.0系统的状态栏问题:(手上没有测试机,待从此测试添加)布局

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//状态栏透明
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//状态栏由半透明(或者渐变)改成透明
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            getWindow().setStatusBarColor(Color.TRANSPARENT);

        }

接下来须要解决的是状态栏字体颜色为黑色,一句代码解决:测试

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

一句

后续笔记待整理字体