带有手势导航的错误小吃店位置

Wrong snackbar position with gesture navigation

我开发的应用显示 Snackbar

这个Snackbar 在我的 MainActivity:

中使用以下代码工作正常
Snackbar snackbar = Snackbar.make(myLayout, "My snackbar", Snackbar.LENGTH_LONG)
                .setBackgroundTint(myColor)
                .setTextColor(ContextCompat.getColor(this, R.color.black));
[...]
snackbar.show();

显示如下:

它适用于每个方向的每个屏幕和不同的 Android 版本。只有一种配置会出错:当设备使用手势导航时。 (这么多新 phones)

在这种情况下,Snackbar 显示为 Snackbar 和屏幕底部之间有一个间隙,如下所示:

我在网上没有找到任何解释,但我自己找到了这个。

通过打开开发人员选项中的 Show layout bounds 选项,我们可以观察到“经典”导航栏看起来仍然在这里,就好像可见性设置为 View.INVISIBLE 我们可以期待 View.GONE 任何屏幕。

因此,当我尝试显示 Snackbar 时,它就出现在这个“隐形导航栏”的顶部。

这是一些带有布局边界的屏幕,有和没有手势导航(在主菜单中):

这是使用不同 phone 和品牌(Pixel、Samsung ...)甚至模拟器进行的测试。

是否有正常行为?我怎样才能缩小这个差距?

对我来说,将 GestureInsetBottomIgnored 设置为 true 解决了问题:

snackbar.setGestureInsetBottomIgnored(true);

来自Android Docs

Sets whether this bottom bar should adjust it's position based on the system gesture area on Android Q and above. Note: the bottom bar will only adjust it's position if it is dismissable via swipe (because that would cause a gesture conflict), gesture navigation is enabled, and this gestureInsetBottomIgnored flag is false.