Android 11 - window.setDecorFitsSystemWindow 不在状态栏和导航栏后面显示屏幕

Dis*_*tra 3 android windowinsets android-11

我正在尝试将我的应用程序更新到 Android 11。我的应用程序的许多屏幕都是在 StatusBar 后面使用应用程序内容设计的。我将我的 gradle 更新到了 Android 11 并开始更新 Window 代码,以获得同样适用于 Android 11 设备的无限制行为。我在 Activitiys onCreate 方法中使用以下代码为 Android 11 之前的设备实现了我想要的结果:

Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)

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

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

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
} 
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*hin 6

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

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

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

  • 谢谢你!`fitsSystemWindows = true` 是我的问题 (2认同)