WindowCompat WindowInsetsCompat 新实现沉浸式隐藏显示状态栏、导航栏、键盘

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白色
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容