【问题标题】:Detecting Soft Navigation Bar on Android and hiding Navigation Bar在Android上检测软导航栏并隐藏导航栏
【发布时间】:2020-03-04 17:47:46
【问题描述】:

现在,在有人将问题标记为重复之前,请仔细阅读问题。我已经尝试了 Stack Overflow 上的每一个当前答案。

一般来说,我想知道如何检测用户设备屏幕底部是否存在软导航栏。

现在,

1)我看到一个答案,人们检查最大屏幕尺寸,查看正在显示的应用程序/活动,然后根据结果确定是否有软导航栏。这对于带有缺口的设备来说是不可靠的。

2) 我不想知道是否有硬件导航栏。软导航栏是必须的,因为:

一个。在我的实际设备中,没有硬件导航栏,也没有软导航栏。现在有几款手机使用手势导航。

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);

然后它在我的物理设备上正常工作,但导航栏没有在模拟器上隐藏,这很明显,因为隐藏它的主标志不存在。

所以我想根据设备是否有屏幕软导航栏,为不同类型的手机运行不同的标志。

因此,我想知道如何检测屏幕上是否有软导航栏。

另外,如果有更好的方法,请帮助我。

【问题讨论】:

  • 来吧,说真的....没有解决办法吗?我见过很多游戏都可以毫无问题地顺利完成......T_T............

标签: java android android-studio


【解决方案1】:
public boolean hasNavigationBar(Resources resources) {
        int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
        return id > 0 && resources.getBoolean(id);
    }

此方法将从 Android 系统读取值 config_showNavigationBar 布尔值。许多 OEM 在像三星一样隐藏或显示导航栏时使用此值。

注意:很多第三方应用程序通过一个棘手的 ADB 命令隐藏导航栏,我仍然没有找到方法检测到这一点,请参阅this question

【讨论】:

  • 带有答案的口头解释通常很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多