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

时间:2020-10-01 10:47:13

标签: android android-11 windowinsets

我正在尝试将我的应用程序更新为Android11。我的应用程序的许多屏幕都是在StatusBar后面设计了带有应用程序内容的屏幕。我将gradle更新为Android 11,并开始更新Window代码以也对Android 11设备获得No Limit行为。 我通过Activitiys 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无限行为

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

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),它运行起来没有任何麻烦。

有人知道我在这里想念什么或做错什么吗?

1 个答案:

答案 0 :(得分:0)

我的应用程序仍在Java代码中,我在另一个使用Kotlin代码的应用程序中尝试了window?.setDecorFitsSystemWindows(false),并且工作正常。

Kotlin在内部使用Java,因此无论是用Java还是Kotlin进行编码,都与该插入API无关。

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