1

我正在使用 API 级别 10 构建我的应用程序。但它可以在以后的版本中安装和使用。仅当设备没有菜单按钮时,我才需要显示操作栏。例如,平板电脑、Google Galaxy Nexus 手机等。人们建议使用 hasPermanentMenuKey() 函数。但我猜它只有在 API 级别 14 之后才可用。谁能建议我如何解决这个问题?

谢谢, 卡提克

4

3 回答 3

12

使用下面的代码:

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()。

希望它会对你有所帮助。

于 2012-12-28T11:02:41.693 回答
0

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;
        }
    }
于 2015-02-27T19:49:02.953 回答
0

虽然它是一个旧帖子,但如果有人在这里遇到这个问题,这是一个可以从 support-v4 库中使用的解决方案(从库版本 24.2.0 开始,它将支持 API-9):

ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(context))

https://developer.android.com/topic/libraries/support-library/index.html

于 2017-03-07T00:19:28.980 回答