0

我当前的 Android 应用程序针对版本 26 到 31

我的一项活动需要能够在全屏和状态/AppBar 显示之间切换,因为它显示 PDF 文件以供阅读。

以下代码完美地显示和隐藏

private fun hideSystemUI() {
    isFullscreen = true
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}

private fun showSystemUI() {
    isFullscreen = false
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
}

但是,正如其他 SO 问题所指出的那样,所有这些标志现在都已弃用。

我已经尝试了替换这些标志的解决方案,但是它非常有问题,我不确定我哪里出错了。

用于替换上述代码的是:-

private fun hideSystemUI() {
    WindowCompat.setDecorFitsSystemWindows(window, false)
    WindowInsetsControllerCompat(window, mainContainer).let { controller ->
        controller.hide(WindowInsetsCompat.Type.systemBars())
        controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    }
}

private fun showSystemUI() {
    WindowCompat.setDecorFitsSystemWindows(window, true)
    WindowInsetsControllerCompat(window, mainContainer).show(WindowInsetsCompat.Type.systemBars())
}

这段代码确实有效,但它并不一致,而且大多数情况下状态栏消失了,但工具栏只是闪烁并重新出现。

我错过了什么?

是否需要进行其他配置更改才能使更新的代码和已弃用的版本一样正常工作?

4

0 回答 0