Android DisplayMetrics 显示绝对大小随方向变化

Android DisplayMetrics display absolute size varies with orientation

有没有人注意到这个问题并解决了在两个方向上获得一致的绝对显示大小的方法?

示例,Nexus 5 (5.0.1):

我本以为纵向的高度会与横向的宽度相匹配。最初怀疑是状态栏,但是docs都清楚了。无论如何,此示例中的状态栏高度在任一方向上均为 75px,示例中的差异为 18px。

显示宽度和高度的代码片段(以像素为单位):

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

String dimensions = String.format("width = %d height = %d", width, height);
Log.v(TAG, dimensions);

这不是整个屏幕的大小,而是显示指标给您的 UI 的大小。您必须考虑状态栏(时钟、电池电量、信号强度栏)所占用的区域所占用的屏幕大小,这会因方向而异。

假设根据您的日志记录,显示器是全高清的,纵向高度为 144px (48dp),横向宽度为 126px (42dp) 占据显示器(当缩放因子为 3 时,即 xxhdpi)。我敢打赌它是导航栏,带有后退、主页和最近按钮。这足以选择布局。

编辑:

如果您需要完整的显示尺寸,可从 API 17 获得以下代码:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= 17) {
    display.getRealSize(size);
} else {
    display.getSize(size); // correct for devices with hardware navigation buttons
}

编辑 2:

如果您想确保在 API 14 到 16 上获得正确的结果,请考虑遵循此答案及其评论 .