带有手势导航的错误小吃店位置
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.
我开发的应用显示 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.