android - Android 11 - window.setDecorFitsSystemWindow 不在状态和导航栏后面显示屏幕
问题描述
我正在尝试将我的应用程序更新到 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);
我试图通过使用为 Android 11 获得相同的无限制行为w.setDecorFitsSystemWindows(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
}
我的应用程序仍然是 Java 代码,我尝试window?.setDecorFitsSystemWindows(false)
在另一个使用 Kotlin 代码的应用程序中运行它没有任何问题。
有谁知道我在这里错过了什么或做错了什么?
解决方案
我的应用程序仍然在 Java 代码中,我在另一个使用 Kotlin 代码的应用程序中尝试了 window?.setDecorFitsSystemWindows(false) 并且它可以正常工作。
Kotlin 在内部使用 Java,因此就嵌入 API 而言,您是使用 Java 还是 Kotlin 编写代码并不重要。
可能,您在视图层次结构中使用的视图组之一会消耗插图并且不会将它们传播到子视图。这是我的情况 - 我的应用程序正在使用DebugDrawer并且window.setDecorFitsSystemWindows(false);
在我的情况下对布局没有任何影响。这种情况甚至有解决方案。如果您有类似的问题,也许您也可以使用它。在 Android Studio 的新布局检查器中检查视图层次结构可能会有所帮助。注意具有属性的视图fitsSystemWindows = true
。此外,该答案可能会有所帮助。
推荐阅读
- google-analytics - 如何在我的 Google 网站上发布 Google Analytics 访问者地图?
- typescript - 打字稿上的 Socket.io 附加属性不存在
- python - 如何在 Python 3.+ 中将所有数据从 VirtualEnv 移动到 CondaEnv
- linux - 使用 sed 命令在 linux 中列出以特定字符开头的元素
- python - 如何从合并的数据框中过滤记录
- excel - Excel VBA - 如果区域中的单元格具有相同的值,则删除整行
- java - java.lang.IllegalAccessException:模块 javafx.base 无法访问类 sample.model.Artists,因为模块没有将 sample.model 打开到 javafx.base
- javascript - 如何在javascript中将字符串转换为运算符?
- mongodb - 我想在 mongodb 中同时使用 id 和 name 进行搜索
- javascript - 如何使暗模式在网页中持久化?