对于使用 Jeremy Feinstein 的 SlidingMenu 并以 API 级别 29 为目标的 Android 应用程序,最近在 2 台设备(运行 Android 11 的三星 Galaxy A01 和三星 Galaxy Note20 Ultra)上发现了一个问题,即屏幕底部的内容被导航栏覆盖。
唯一对 2 个受影响的设备产生影响的是在滑动菜单构造函数中添加它:
if (Build.VERSION.SDK_INT >= 21) {
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
或使用 SlidingMenu.SLIDING_CONTENT
代替 SlidingMenu.SLIDING_WINDOW
。
这些更改中的一个或另一个解决了 2 台设备上的问题,但在从未发生过问题的设备上(运行 Android 9、10、11 的 Pixel 2、Moto X4、Nexus 6 等)然后是屏幕内容底部和导航栏之间底部的白色间隙。
据报道,有问题的 2 台设备在过去的某个不确定时间点(可能在 1 月左右)正确显示了所有屏幕,在此前后应用程序没有更新。它们属于同一个用户,他报告说他在使用任何其他应用程序时都没有出现此问题,并且对于此应用程序,仅在具有自定义 ActionBar 的 Fragments 中显示的屏幕上(删除自定义 ActionBar 无济于事)。
尝试过的其他没有帮助的事情,没有特定的顺序,包括:
android:layout_marginBottom="?attr/actionBarSize
添加到受影响屏幕的最外层布局。在未受影响的设备上产生间隙,而在受影响的设备上没有变化。
android:adjustViewBounds="true"
添加到受影响屏幕上的所有 ImageViews,每个 Some Android Phones Cutting Off UI At Bottom & Right of Screen 不做任何更改。
android:fitsSystemWindows="true"
添加到受影响屏幕的最外层布局。没有变化。
bottomPadding += getNavBarHeight(getContext());
在 SlidingMenu 的 fitSystemWindows() 中,在未受影响的设备上创建一个间隙,而在受影响的设备上没有变化,
来自https://github.com/jfeinstein10/SlidingMenu/issues/680
windowDrawsSystemBarBackgrounds=false
从 https://github.com/jfeinstein10/SlidingMenu/issues/680
<item name="android:windowTranslucentNavigation">false</item>
无变化,根据 Bottom soft NavigationBar overlaps my ListView
将自定义 ActionBar XML 包装在 LinearLayout 中(这确实解决了运行 Android 11 的模拟器上的问题,但没有解决物理设备上的问题。每 https://androidforums.com/threads/layouts-being-pushed-off-screen-by-appbar-and-viewpager.1089636/)
那么问题是,如何为有问题的设备和没有问题的设备解决问题?如果我应该发布任何代码,请告诉我。
答案 0 :(得分:0)
问题是导航栏高度计算,必须针对带有显示切口的设备进行调整,感谢@JohnLord 发现了这种差异。