现在,在任何人将问题标记为重复之前,请仔细阅读该问题。我已经尝试了关于堆栈溢出的每个当前答案。
通常,我想知道如何检测用户设备屏幕底部是否存在任何软导航栏。
现在
1)我看到了一个答案,人们可以检查最大屏幕尺寸,查看正在显示哪个应用程序/活动,然后根据结果确定是否没有柔软的导航栏。对于具有缺口的设备,这将是不可靠的。
2)我不希望知道是否有硬件导航栏。软导航栏是必须的,因为:
a。在我的实际设备中,也没有硬件导航栏,也没有软导航栏。如今,有几部手机使用手势进行导航。
b。但是在我的模拟器中,有导航栏。有柔软的导航栏。
要隐藏它们,我使用以下代码:
int uiOptionsForDevicesWithoutNavBar = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptionsForDevicesWithoutNavBar);
现在,这就像一种魅力。 Waalaa,导航栏被隐藏。但是,这是我实际手机上的问题。 它使用手势。在我第一次向后滑动时,会出现通知栏,然后在下次向后快速滑动时,会执行所需的后退操作。
但是,如果我这样做:
int uiOptionsForDevicesWithoutNavBar = View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptionsForDevicesWithoutNavBar);
然后它可以在我的物理设备上正常工作,但是导航栏不会隐藏在模拟器上,这很明显,因为隐藏它的主标志不存在。
因此,我想针对不同类型的手机运行不同的标志,具体取决于设备是否具有屏幕上的Soft Nav Bar。
因此,我想知道如何检测屏幕上是否有柔软的导航栏。
此外,如果有更好的方法,请帮助我。
答案 0 :(得分:0)
public boolean hasNavigationBar(Resources resources) {
int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
return id > 0 && resources.getBoolean(id);
}
此方法将从Android系统读取config_showNavigationBar布尔值。许多OEM在隐藏或显示导航栏(例如Samsung)时都使用此值。
注意:许多第三方应用程序通过一个棘手的ADB命令隐藏了导航栏,但我仍然没有找到检测此情况的方法,请参阅this question