首页 > 解决方案 > android.view.View.systemUiVisibility 已弃用。什么是替代品?

问题描述

我已将项目目标 API 版本更新为 30,现在我看到 systemUiVisibility 属性已被弃用。

下面的 kotlin 代码是我正在使用的,它实际上相当于Java 中的setSystemUiVisibility方法。

playerView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)

如果您对此已弃用的代码有任何稳定的替代品,请告诉我。谷歌的建议是使用WindowInsetsController,但我不知道怎么做。

标签: androidkotlin

解决方案


为了兼容性,使用WindowCompatWindowInsetsControllerCompat。您需要将您的 gradle 依赖项升级androidx.core到至少1.6.0-alpha03,以便setSystemBarsBehavior对 SDK < 30 的支持。

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())
}

WindowInsets您可以通过观看此YouTube 视频了解更多信息

对于显示屏顶部有凹槽的设备,您可以将以下内容添加到 v27theme.xml文件中,使 UI 出现在凹槽的任一侧:

<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>

您可以在此链接中阅读更多内容:Display Cutout


推荐阅读