android中getRealMetrics的替代方法是获取屏幕原始大小

时间:2015-07-15 10:28:30

标签: android android-menu android-navigation android-windowmanager

在我的Android应用程序中,我需要找出设备是否有导航栏。为此,我得到设备原始屏幕大小和应用程序窗口大小。基于此我正在计算差异,因此我可以找出设备是否有导航栏。 这是我使用的代码:

public static boolean hasSoftKeys(WindowManager windowManager){
    Display d = windowManager.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;

    return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;
}

问题是:拨打" getRealMetrics"方法需要api级别17.这里我需要一个针对较低版本设备的解决方案,它将提供与getRealMetrics相同的结果以获得原始屏幕大小。我没有找到任何解决方案。

有人可以建议我使用适用于较低版本设备的getRealMetrics替代方案吗?

这是我的调查,以找出导航栏的可用性。它并非在所有设备上都是可靠的结果。

代码1:

boolean hasNavBar(Context context) {

        boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
        boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
        return !hasMenuKey && !hasBackKey;
    }

代码2

boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();

通过使用此代码,我们可以检查设备是否具有PermanentMenuKey。但是没有永恒菜单有软导航栏的意义设备。

1 个答案:

答案 0 :(得分:0)

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;