java - Android 11 上的沉浸式全屏

标签 java android android-layout

这个问题在这里已经有了答案:





android.view.View.systemUiVisibility deprecated. What is the replacement?

(17 个回答)


3个月前关闭。




之前,要启用沉浸式全屏模式,您必须使用 setSystemUiVisibility ,像这样:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
从 API 30 开始,它已被弃用,那么解决方法是什么?

最佳答案

为了兼容性,请使用 WindowCompatWindowInsetsControllerCompat .您需要升级 androidx.core 的 gradle 依赖项至少到 1.6.0-alpha03以便支持setSystemBarsBehavior在 SDK < 30 上。mainContainer是顶级ConstraintLayout在我的 Activity 中。

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 video
编辑:
我之前没有在此答案中考虑显示切口或显示摄像头。在应用程序主题样式中,我添加了以下内容以在切口上方显示我的内容(在纵向模式下显示在屏幕顶部):
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
您可以通过以下链接阅读更多信息:Display Cutout

关于java - Android 11 上的沉浸式全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62643517/

相关文章:

java - 对包含数字的字符串数组进行排序

java - Intellij IDEA Maven 插件 - 管理依赖关系

android - 仅淡入 Android 中的按钮文本

android - 在 Android PreferenceActivity 中更改分隔线颜色

Android - 如何复制 Gmail 应用程序的设置屏幕?

java - 与 Oracle 连接的 Netbeans java.lang.ClassNotFoundException

java - 简单的java继承问题

java - 新 Intent 未从服务开始(尝试了 Google 的所有解决方案)

java - Parcelable 实现不起作用。应用程序仍会在设备旋转时进行网络调用

Android:如何在将数据加载到 WebView 时显示进度条?