如何检测Android设备中可用的软菜单键?

时间:2015-07-14 11:44:04

标签: android android-menu android-navigation

我想在Android应用程序中查看设备中的菜单键存在。为了实现这一点,我使用以下代码来检测天气设备是否具有硬件菜单,并且它工作正常

!ViewConfiguration.get(ScsCommander.getInstance().getApplicationContext()).hasPermanentMenuKey()

但是我没有找到找到天气的逻辑,设备是否存在软菜单

请建议我有任何方法可以检测设备中软菜单是否可用

1 个答案:

答案 0 :(得分:1)

没有可靠/干净的方法来检查软菜单(也就是导航栏)是否存在!

您可以尝试使用以下代码(未在所有设备上进行测试,无论如何都不是可靠的解决方案):

boolean hasNavBar(Context context) {
    Resources resources = context.getResources();
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    if (id > 0) {
        return resources.getBoolean(id);
    } else {    // Check for keys
        boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
        boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
        return !hasMenuKey && !hasBackKey;
    }
}

这里,我们使用Resources类获取资源标识符。我们正在寻找一个资源"导航栏"它作为第一个参数传递。

getIdentifier返回关联的资源标识符。如果未找到此类资源,则返回0。 (0不是有效的资源ID。)

如果此方法失败,请在else我们尝试检查设备上是否存在某些物理键,例如backHome,这通常构成导航栏。< / p>