替换为Android 2.3.3的hasPermanentMenuKey()

时间:2012-12-28 10:29:52

标签: android android-menu

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

谢谢, KARTHIK

3 个答案:

答案 0 :(得分: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()。

希望它能为您提供一些帮助。

答案 1 :(得分:0)

这适用于市场上的所有设备:

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;
        }
    }

答案 2 :(得分:0)

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

ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(context))

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