如何判断Android设备是否有物理键或软件导航栏?我需要根据是否绘制软件导航来更改布局.
例如,HTC Desire C有硬件密钥:

我应该澄清 - 我看着导航栏,而不是键盘.家,背等我试过:
getResources().getConfiguration().keyboard);
getResources().getConfiguration().navigation);
getResources().getConfiguration().navigationHidden);
Run Code Online (Sandbox Code Playgroud)
在两个设备上返回相同的值.
ser*_*kye 49
第一次启动应用程序并保存到首选项时解决此问题:
public static boolean hasSoftKeys(WindowManager windowManager){
boolean hasSoftwareKeys = true;
//c = context; use getContext(); in fragments, and in activities you can
//directly access the windowManager();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR1){
Display d = c.getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
int realHeight = realDisplayMetrics.heightPixels;
int realWidth = realDisplayMetrics.widthPixels;
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int displayHeight = displayMetrics.heightPixels;
int displayWidth = displayMetrics.widthPixels;
hasSoftwareKeys = (realWidth - displayWidth) > 0 ||
(realHeight - displayHeight) > 0;
} else {
boolean hasMenuKey = ViewConfiguration.get(c).hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
hasSoftwareKeys = !hasMenuKey && !hasBackKey;
}
return hasSoftwareKeys;
}
Run Code Online (Sandbox Code Playgroud)
private boolean isHardwareKeyboardAvailable() { return getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS; }
此外,这里还有更多信息。http://developer.android.com/reference/android/content/res/Configuration.html#keyboard
编辑 - 检查物理键盘
private boolean isPhysicalKeyboardAvailable() { return getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY; }
有关不同配置的更多信息,请查看 http://developer.android.com/reference/android/content/res/Configuration.html#keyboard
我确信其中之一是有效的。
第二次编辑-
查看。已经问过了。
| 归档时间: |
|
| 查看次数: |
8614 次 |
| 最近记录: |