由于Android N引入了分屏,因此应用程序的窗口大小可能是原始应用程序的一半。我发现getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
不再总是返回实际的设备屏幕大小,因为在分屏模式下,显示器的高度将是应用程序的窗口高度。我可以使用任何其他API来获取实际的屏幕尺寸吗?
答案 0 :(得分:3)
Display.getRealMetrics(DisplayMetrics)
将返回实际的显示尺寸。
答案 1 :(得分:-1)
您可以使用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);
}
在多窗口模式下获取实际设备尺寸。
使用展示
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设备。