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