沉浸式
//沉浸式
//沉浸式 内容显示在状态栏与导航栏下面
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_FULLSCREEN);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
//全屏沉浸式 隐藏状态栏与导航栏(手势可以暂时显示状态栏与导航栏)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
//全屏沉浸式 隐藏导航栏(显示状态栏,但内容显示到到横栏下面)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
属性配置
-
View.SYSTEM_UI_FLAG_FULLSCREEN 隐藏整个状态栏 (手势下拉时,会显示出来且不会再隐藏)
-
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 内容延伸到状态栏,不隐藏状态栏
-
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 隐藏整个导航栏
-
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 内容延伸到导航栏,不隐藏导航栏
-
View.SYSTEM_UI_FLAG_LAYOUT_STABLE 稳定内容,不让内容随状态栏和导航栏的显示隐藏而变动大小
-
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 粘性沉浸式,手势可以暂时展示出来隐藏的状态栏与导航栏,过段时间会自动隐藏,不会对内容布局产生影响,很适合开屏页
适配刘海屏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
//适配刘海屏
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
getWindow().setAttributes(layoutParams);
}