【问题标题】:Android 11 - window.setDecorFitsSystemWindow doesn't show screen behind Status and Navigation BarsAndroid 11 - window.setDecorFitsSystemWindow 不在状态和导航栏后面显示屏幕
【发布时间】:2020-10-01 10:47:13
【问题描述】:

我正在尝试将我的应用更新到 Android 11。我的应用的许多屏幕都是在状态栏后面使用应用内容设计的。我将我的 gradle 更新到 Android 11 并开始更新 Window 代码以获取 Android 11 设备的无限制行为。 我在我的 Activity onCreate 方法中使用以下代码为预 Android 11 设备实现了我想要的结果:

Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

我尝试使用 w.setDecorFitsSystemWindows(false); 为 Android 11 获得相同的无限制行为

我尝试使用它而不是使用标志,将它与标志一起使用并传递真假,在设置标志之前和之后设置它,但我总是看到一个白色的状态和系统导航栏,而不是它们后面的我的应用程序内容。 我尝试了什么:

Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also tried with true
} else {
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

//or
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also tried with true
} 
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

//or
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also tried with true
} 

我的应用程序仍然是 Java 代码,我在另一个使用 Kotlin 代码的应用程序中尝试了window?.setDecorFitsSystemWindows(false),它可以正常运行。

有人知道我在这里遗漏了什么或做错了什么吗?

【问题讨论】:

  • 迄今为止我能收到的最佳解决方案也是设置:controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); controller.hide(WindowInsets.Type.statusBars());在 w.setDecorFitsSystemWindows(false) 之后;还有其他人有更好的解决方案吗?

标签: android android-11 windowinsets


【解决方案1】:

我的应用程序仍在 Java 代码中,我在另一个使用 Kotlin 代码的应用程序中尝试了 window?.setDecorFitsSystemWindows(false),它运行时没有任何问题。

Kotlin 在内部使用 Java,因此就嵌入 API 而言,您是使用 Java 还是 Kotlin 编写代码并不重要。

可能,您在视图层次结构中使用的视图组之一会消耗插图,并且不会将它们传播到子视图。这就是我的情况 - 我的应用程序正在使用 DebugDrawerwindow.setDecorFitsSystemWindows(false); 在我的情况下对布局没有任何影响。这种情况下甚至还有solution。如果您有类似的问题,也许您也可以使用它。在 Android Studio 的新布局检查器中检查视图层次结构可能会有所帮助。注意具有fitsSystemWindows = true 属性的视图。另外,answer 可能会有所帮助。

【讨论】:

  • 谢谢! fitsSystemWindows = true 是我的问题
猜你喜欢
  • 2021-07-20
  • 2018-01-13
  • 2016-01-26
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2021-01-10
  • 2015-03-23
  • 1970-01-01
相关资源
最近更新 更多