Android DisplayMetrics显示的绝对大小因方向而异

时间:2015-03-25 19:50:21

标签: android screen-size

是否有人注意到这个问题并解决了在两个方向上始终如一地获得绝对显示尺寸的方法?

示例,Nexus 5(5.0.1):

  • 肖像:宽度= 1080高度= 1776
  • 风景:宽度= 1794高度= 1080

我原以为画像中的高度与景观中的宽度相匹配。最初怀疑状态栏,但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);

2 个答案:

答案 0 :(得分:4)

假设显示器是FullHD,根据您的记录,纵向高度为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
}

EDIT2:

如果您想确保在API 14到16中获得正确的结果,请考虑遵循此答案及其注释 https://stackoverflow.com/a/11004877/2444099

答案 1 :(得分:0)

这不是整个屏幕尺寸,而是显示指标为您提供的UI的大小。您必须考虑状态栏占用的屏幕大小(时钟,电池电量,信号强度条)占用的屏幕尺寸,这将取决于方向。