我最近在我的应用程序中添加了以下代码,以从某些手机中删除导航栏(软按钮)。这导致了我的应用程序的一些调整大小问题,因此摆脱导航栏是理想的。
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等设备上。但是,这会导致禁用和触摸或手势的副作用,直到首先出现至少一个触摸事件。例如,我在主屏幕上有一些按钮。使用上面的代码,第一次点击按钮什么都不做。从第二次开始,该应用程序表现得像平常一样。我的应用程序还使用了一个viewpager,并且在我首先点击屏幕上的某个位置之前,滑动到其他选项卡或从操作栏中选择另一个选项卡也没有任何效果。
显然,这种行为不是必需的。当用户打开应用程序并选择其中一个按钮时,他们希望单击该按钮。相反,他们必须按两次按钮(然后从那一点开始一切正常)。
我正在三星Galaxy S3(底部没有导航栏)和Nexus 5(底部有导航栏)上测试。
编辑:进一步研究 - 隐藏导航栏只是暂时的。导航栏正在请求第一次触摸事件的焦点,因为导航栏一旦有任何类型的ui事件就会弹出备份。因此,即使在首先没有导航栏的Galaxy S3上,触摸事件也会被导航栏吸引。对于真正具有导航栏的设备,该栏将在每次交互时重新出现,您必须告诉设备再次隐藏它。据我所知,没有办法永久隐藏导航栏。
我的下一个问题是找出如何查询设备以查看是否有导航栏。如果我知道设备没有导航栏,则无需尝试隐藏它并让操作系统吸收第一个触摸事件。
答案 0 :(得分:1)
SYSTEM_UI_FLAG_HIDE_NAVIGATION
专为观看视频和阅读书籍等被动活动而设计。出于您的目的,沉浸式模式是更好的选择。 https://developer.android.com/training/system-ui/immersive.html
更具体地说,您可能希望将SYSTEM_UI_FLAG_IMMERSIVE_STICKY
标记与SYSTEM_UI_FLAG_HIDE_NAVIGATION
一起添加,以便隐藏导航栏并保持隐藏,直到用户从顶部或底部滑动。
请注意"提醒泡泡"将在用户首次在您的应用中进入此模式时显示。