WindowCompat WindowInsetsCompat 新实现沉浸式隐藏显示状态栏、导航栏、键盘
大概类型
WindowInsetsCompat.Type.statusBars()
WindowInsetsCompat.Type.navigationBars()
WindowInsetsCompat.Type.captionBar()
WindowInsetsCompat.Type.ime()
WindowInsetsCompat.Type.systemGestures()
WindowInsetsCompat.Type.mandatorySystemGestures()
WindowInsetsCompat.Type.tappableElement()
WindowInsetsCompat.Type.displayCutout()
WindowInsetsCompat.Type.systemBars()
常用
//获取WindowInsetsController对象实例
val controller = WindowCompat.getInsetsController(window, window.decorView)
//调用hide隐藏状态栏
controller.hide(WindowInsetsCompat.Type.statusBars())
//调用hide隐藏导航栏
controller.hide(WindowInsetsCompat.Type.navigationBar())
//调用show显示状态栏
controller.show(WindowInsetsCompat.Type.statusBars())
//调用show显示导航栏
controller.show(WindowInsetsCompat.Type.navigationBar())
//调用hide隐藏键盘
controller.hide(WindowInsetsCompat.Type.ime())
//调用hide隐藏状态栏、导航栏和标题栏
controller.hide(WindowInsetsCompat.Type.systemBars())
沉浸式设置
//沉浸式效果:
val controller = WindowCompat.getInsetsController(it, it.decorView)
controller.hide(WindowInsetsCompat.Type.statusBars())
controller.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
// 在这里设置fitsSystemWindows
WindowCompat.setDecorFitsSystemWindows(it, false) //false 表示沉浸
//允许window 的内容可以上移到刘海屏状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val lp = it.attributes
lp.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
it.attributes = lp
}
/**
* 全屏
*/
fun hideSystemUI() {
dialog?.window?.let {
WindowCompat.setDecorFitsSystemWindows(it, false)
val insetsController = WindowCompat.getInsetsController(it, it.decorView)
insetsController.hide(WindowInsetsCompat.Type.systemBars())
insetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
/**
* 退出全屏
*/
fun showSystemUI() {
dialog?.window?.let {
WindowCompat.setDecorFitsSystemWindows(it, true)
val insetsController = WindowCompat.getInsetsController(it, it.decorView)
insetsController.show(WindowInsetsCompat.Type.systemBars())
}
}
// 状态栏设置
window.statusBarColor = Color.BLACK //设置底色
WindowCompat.getInsetsController(window, findViewById<FrameLayout>(android.R.id.content))
.let { controller ->
controller.show(WindowInsetsCompat.Type.statusBars())
controller.isAppearanceLightStatusBars = false//true字体黑色,false白色
}