安卓系统隐藏导航栏会导致最初无法拾取按钮和手势



我最近在我的应用程序中添加了以下代码,以删除一些手机上的导航栏(软按钮)。这导致我的应用程序出现了一些调整大小的问题,所以去掉导航栏是理想的选择。

getWindow().requestFeature(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

查看更多信息:https://developer.android.com/training/system-ui/navigation.html

这正是我想要的。Nexus 5等设备上不再存在软按钮。然而,这导致了禁用和触摸或手势的副作用,直到首先出现至少一个触摸事件。例如,我在主屏幕上有一些按钮。使用上面的代码,第一次点击按钮不会有任何作用。从第二次开始,该应用程序的行为就像正常的一样。我的应用程序还使用了一个视图寻呼机,在我首先点击屏幕上的某个地方之前,滑动到其他选项卡或从操作栏中选择另一个选项卡也没有效果。

显然,这种行为是不可取的。当用户打开应用程序并选择其中一个按钮时,他们希望该按钮被点击。相反,他们必须点击两次按钮(然后从那时起一切都很好)。

我正在三星Galaxy S3(底部没有导航栏)和Nexus 5(底部有导航栏)上测试这一点。

编辑:进一步研究-隐藏导航栏只是暂时的。导航栏请求对第一次触摸事件进行聚焦,因为导航栏旨在在出现任何类型的ui事件时立即弹出。因此,即使在最初没有导航栏的Galaxy S3上,触摸事件也会被导航栏吸收。对于确实有导航栏的设备,每次交互时导航栏都会重新出现,您必须告诉设备再次隐藏它。据我所知,没有办法永久隐藏导航栏。

我的下一个问题是了解如何查询设备以查看是否有导航栏。如果我知道设备没有导航栏,那么就没有必要试图隐藏它,让操作系统吸收第一次触摸事件。

SYSTEM_UI_FLAG_HIDE_NAVIGATION是为被动活动设计的,比如看视频和看书。出于您的目的,沉浸式模式是一个更好的选择。https://developer.android.com/training/system-ui/immersive.html

更具体地说,您可能希望将SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志与SYSTEM_UI_FLAG_HIDE_NAVIGATION一起添加,这样导航栏将被隐藏,并且将一直隐藏,直到用户从顶部或底部滑动为止。

请注意,当用户在您的应用程序中首次进入此模式时,将出现"提醒气泡"。

最新更新