【发布时间】:2021-05-19 01:40:55
【问题描述】:
对于使用 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 的片段中显示的屏幕上(删除自定义 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/)
所以问题是,如何为有问题的设备和没有问题的设备解决问题?如果有任何我应该发布的代码,请告诉我。
【问题讨论】:
-
他的代码显然没有正确获取屏幕尺寸和尺寸。如果设备有打孔摄像头或缺口,我之前已经看到这是一个问题,因为通知区域可以是随机大小。我建议你看看这是否是问题并检查这个链接:developer.android.com/guide/topics/display-cutout
标签: android navigationbar overlap slidingmenu