WindowCompat WindowInsetsCompat 新實(shí)現(xiàn)沉浸式隱藏顯示狀態(tài)欄往踢、導(dǎo)航欄、鍵盤
大概類型
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對(duì)象實(shí)例
val controller = WindowCompat.getInsetsController(window, window.decorView)
//調(diào)用hide隱藏狀態(tài)欄
controller.hide(WindowInsetsCompat.Type.statusBars())
//調(diào)用hide隱藏導(dǎo)航欄
controller.hide(WindowInsetsCompat.Type.navigationBar())
//調(diào)用show顯示狀態(tài)欄
controller.show(WindowInsetsCompat.Type.statusBars())
//調(diào)用show顯示導(dǎo)航欄
controller.show(WindowInsetsCompat.Type.navigationBar())
//調(diào)用hide隱藏鍵盤
controller.hide(WindowInsetsCompat.Type.ime())
//調(diào)用hide隱藏狀態(tài)欄捐晶、導(dǎo)航欄和標(biāo)題欄
controller.hide(WindowInsetsCompat.Type.systemBars())
沉浸式設(shè)置
//沉浸式效果:
val controller = WindowCompat.getInsetsController(it, it.decorView)
controller.hide(WindowInsetsCompat.Type.statusBars())
controller.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
// 在這里設(shè)置fitsSystemWindows
WindowCompat.setDecorFitsSystemWindows(it, false) //false 表示沉浸
//允許window 的內(nèi)容可以上移到劉海屏狀態(tài)欄
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())
}
}
// 狀態(tài)欄設(shè)置
window.statusBarColor = Color.BLACK //設(shè)置底色
WindowCompat.getInsetsController(window, findViewById<FrameLayout>(android.R.id.content))
.let { controller ->
controller.show(WindowInsetsCompat.Type.statusBars())
controller.isAppearanceLightStatusBars = false//true字體黑色,false白色
}