我想在Android应用程序中查看设备中的菜单键存在。为了实现这一点,我使用以下代码来检测天气设备是否具有硬件菜单,并且它工作正常
!ViewConfiguration.get(ScsCommander.getInstance().getApplicationContext()).hasPermanentMenuKey()
但是我没有找到找到天气的逻辑,设备是否存在软菜单。
请建议我有任何方法可以检测设备中软菜单是否可用。
答案 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
我们尝试检查设备上是否存在某些物理键,例如back
或Home
,这通常构成导航栏。< / p>