我正在使用 API 级别 10 构建我的应用程序。但它可以在以后的版本中安装和使用。仅当设备没有菜单按钮时,我才需要显示操作栏。例如,平板电脑、Google Galaxy Nexus 手机等。人们建议使用 hasPermanentMenuKey() 函数。但我猜它只有在 API 级别 14 之后才可用。谁能建议我如何解决这个问题?
谢谢, 卡提克
我正在使用 API 级别 10 构建我的应用程序。但它可以在以后的版本中安装和使用。仅当设备没有菜单按钮时,我才需要显示操作栏。例如,平板电脑、Google Galaxy Nexus 手机等。人们建议使用 hasPermanentMenuKey() 函数。但我猜它只有在 API 级别 14 之后才可用。谁能建议我如何解决这个问题?
谢谢, 卡提克
使用下面的代码:
ViewConfiguration.get(context).hasPermanentMenuKey();
首先将您的构建目标设置为API 级别 14 或 UP,这将阻止 Eclipse 在使用上述代码时出现任何错误。
现在检查您的 API 级别
案例 1. 如果您的 API 级别:10 或更少
该设备确实有硬件菜单按钮。
案例 2. 如果您的 API 级别:11 到 13(HoneyComb)
该设备没有 HW MENU 按钮,因为带有 Honeycomb 的平板电脑没有 MENU。
案例 3. 如果您的 API 级别:14 或更高
如果 API 级别为 14 或更高,您可以使用 hasPermanentMenuKey()。
希望它会对你有所帮助。
This should work for all devices on the market:
public static boolean hasPermanentKeys(Activity activity) {
//
int height=0;
int realHeight=0;
WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
height = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
realHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
realHeight = realSize.y;
} catch (Exception ignored) {
}
if(height == realHeight){
return true;
}
else{
return false;
}
}
虽然它是一个旧帖子,但如果有人在这里遇到这个问题,这是一个可以从 support-v4 库中使用的解决方案(从库版本 24.2.0 开始,它将支持 API-9):
ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(context))
https://developer.android.com/topic/libraries/support-library/index.html