如何获得Android N后的实际屏幕尺寸?

时间:2016-04-19 00:10:44

标签: android android-7.0-nougat

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

您可以使用DisplayMetricsprivate 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); } 在多窗口模式下获取实际设备尺寸。

使用展示

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

使用DisplayMetrics:

class HashSet:
    def __init__(self, capacity=10):
        self.table = [None] * capacity

    def add(self, item):
        h = hash(item)
        index = h % len(self.table)

        if self.table[index] == None:
            self.table[index] = LinkedList() 

        if item not in self.table[index]:
            self.table[index].add(item)

    def __iter__(self):
        table = []
        ptr = None
        for i in range(0, len(self.table)):
            if self.table[i]:
                ptr = self.table[i].head
                while ptr != None:
                    table.append(ptr.item)
                    ptr = ptr.next
        return sorted(table)

答案 2 :(得分:-2)

到目前为止,我根本找不到合适的解决方案,但我会通过每个更改的分辨率的densityDpi来处理它。就像这样:

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设备。