自从Android N引入分屏功能后,应用程序的窗口大小可以缩小至原来的一半。我发现getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
不再总是返回实际设备屏幕大小了,因为在分屏模式下,显示器的高度将成为应用程序窗口的高度。是否有其他API可以用于获取实际屏幕大小?
自从Android N引入分屏功能后,应用程序的窗口大小可以缩小至原来的一半。我发现getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
不再总是返回实际设备屏幕大小了,因为在分屏模式下,显示器的高度将成为应用程序窗口的高度。是否有其他API可以用于获取实际屏幕大小?
Display.getRealMetrics(DisplayMetrics)
方法可以获取实际的显示尺寸。
使用 Display
或 DisplayMetrics
可以在多窗口模式下获取真实设备尺寸。
使用 Display:
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);
}
目前我还没有找到一个适当的解决方案,但我通过每个分辨率的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;
}
}
在您的 Android N 设备上,密度最低的 DPI 值越低,显示器的分辨率就越高。