3

由于 Android N 引入了分屏,因此您的应用程序的窗口大小可以是原来的一半。我发现getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);不再总是返回实际的设备屏幕尺寸,因为在分屏模式下,显示器的高度将是您应用程序的窗口高度。我可以使用任何其他 API 来获取实际的屏幕尺寸吗?

4

3 回答 3

3

Display.getRealMetrics(DisplayMetrics)将返回实际的显示尺寸。

于 2016-04-22T20:25:38.990 回答
0

Display您可以使用或在多窗口模式下获取实际设备大小DisplayMetrics

使用显示:

private void findRealSize(Activity activity)
{
    Point size = new Point();
    Display display = activity.getWindowManager().getDefaultDisplay();

    if (Build.VERSION.SDK_INT >= 17)
        display.getRealSize(size);
    else
        display.getSize(size);

    int realWidth = size.x;
    int realHeight = size.y;

    Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}

使用 DisplayMetrics:

private void findRealSize(Activity activity)
{
    DisplayMetrics displayMetrics = new DisplayMetrics();

    if (Build.VERSION.SDK_INT >= 17)
    {
        activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
    }
    else
    {
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    }

    int realWidth = displayMetrics.widthPixels;
    int realHeight = displayMetrics.heightPixels;

    Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
于 2017-11-07T10:20:48.490 回答
-2

到目前为止,我根本找不到合适的解决方案,但我正在通过改变的每个分辨率的密度 Dpi 来处理它。像这样:

private int getScreenDensityDPI() {
    DisplayMetrics metrics = new DisplayMetrics();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
    } else {
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
    }
    return metrics.densityDpi;
}

private int getNumberItemsByScreenResolution() {
    int densityDPI = getScreenDensityDPI();
    if (densityDPI <= 140) {
        return 6;
    } else if (densityDPI <= 160) {
        return 5;
    } else {
        return 4;
    }
}

虽然密度 DPI 最低,但显示器的最高分辨率将在您的 android N 设备中。

于 2016-04-28T19:53:37.300 回答