Android 导航栏覆盖屏幕底部
Android navigation bar covers bottom of screen
对于使用 Jeremy Feinstein 的 SlidingMenu 和目标 API 级别 29 的 Android 应用程序,最近在 2 台设备(Samsung Galaxy A01 和 Samsung Galaxy Note20 Ultra,运行 Android 11) 屏幕底部的内容被导航栏覆盖。
唯一对 2 台受影响的设备产生影响的是在滑动菜单构造函数中添加:
if (Build.VERSION.SDK_INT >= 21) {
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
或使用 SlidingMenu.SLIDING_CONTENT
而不是 SlidingMenu.SLIDING_WINDOW
。
这些更改中的一个或另一个解决了 2 台设备上的问题,但在从未发生过问题的设备上(Pixel 2、Moto X4、Nexus 6 等,运行 Android 9, 10, 11) 然后在屏幕内容底部和导航栏之间的底部有一个白色间隙。
据报道,有问题的 2 台设备在过去的某个不确定时间点(可能是在 1 月左右)正确显示了所有屏幕,在该时间点附近没有对应用程序进行更新。它们属于同一个用户,该用户报告说他在使用任何其他应用程序时都没有这个问题,对于这个应用程序,只有在带有自定义 ActionBar 的 Fragments 中显示的屏幕上(删除自定义 ActionBar 没有帮助)。
其他已尝试但没有帮助的方法(排名不分先后)包括:
android:layout_marginBottom="?attr/actionBarSize
添加到受影响屏幕的最外层布局。在不受影响的设备上创建一个间隙,在受影响的设备上不做任何更改。
android:adjustViewBounds="true"
添加到受影响屏幕上的所有 ImageView,根据 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,但不是物理设备。Per https://androidforums.com/threads/layouts-being-pushed-off-screen-by-appbar-and-viewpager.1089636/)
所以问题是,如何解决有问题和没有问题的设备?让我知道是否有任何代码我应该 post.
问题是导航栏高度计算,必须针对带有显示屏切口的设备进行调整,感谢@JohnLord 发现了这个差异。
对于使用 Jeremy Feinstein 的 SlidingMenu 和目标 API 级别 29 的 Android 应用程序,最近在 2 台设备(Samsung Galaxy A01 和 Samsung Galaxy Note20 Ultra,运行 Android 11) 屏幕底部的内容被导航栏覆盖。
唯一对 2 台受影响的设备产生影响的是在滑动菜单构造函数中添加:
if (Build.VERSION.SDK_INT >= 21) {
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
或使用 SlidingMenu.SLIDING_CONTENT
而不是 SlidingMenu.SLIDING_WINDOW
。
这些更改中的一个或另一个解决了 2 台设备上的问题,但在从未发生过问题的设备上(Pixel 2、Moto X4、Nexus 6 等,运行 Android 9, 10, 11) 然后在屏幕内容底部和导航栏之间的底部有一个白色间隙。
据报道,有问题的 2 台设备在过去的某个不确定时间点(可能是在 1 月左右)正确显示了所有屏幕,在该时间点附近没有对应用程序进行更新。它们属于同一个用户,该用户报告说他在使用任何其他应用程序时都没有这个问题,对于这个应用程序,只有在带有自定义 ActionBar 的 Fragments 中显示的屏幕上(删除自定义 ActionBar 没有帮助)。
其他已尝试但没有帮助的方法(排名不分先后)包括:
android:layout_marginBottom="?attr/actionBarSize
添加到受影响屏幕的最外层布局。在不受影响的设备上创建一个间隙,在受影响的设备上不做任何更改。android:adjustViewBounds="true"
添加到受影响屏幕上的所有 ImageView,根据 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,但不是物理设备。Per https://androidforums.com/threads/layouts-being-pushed-off-screen-by-appbar-and-viewpager.1089636/)
所以问题是,如何解决有问题和没有问题的设备?让我知道是否有任何代码我应该 post.
问题是导航栏高度计算,必须针对带有显示屏切口的设备进行调整,感谢@JohnLord 发现了这个差异。