为什么我的 android 模拟器和我的 android phone 会给我不同的设备密度和 DPI 结果?

Why does my android emulator, and my android phone give me different results for a devices density and DPI?

在我的 Lg G stylo h634 上,它的分辨率为 (720*1280),尺寸为 5.7 英寸,实际 PPI 为 258。有了这些信息,phone 应该有:

DP width: 240
DP height: 240
Density: 1.5
Density PPI: 240

然而,当我 运行 在这个真实设备上进行测试时,它给了我:

DP width: 257
DP height: 258
Density: 2.0
Density PPI: 320

现在,当我 运行 具有相同规格的 phone 的模拟版本时,会给出第一个指标(密度:1.5,PPI:240 等),这是正确的指标。我不确定为什么会这样,但有人能解释为什么模拟版本比真实设备更准确吗?

它并不总是关于 DPI 和 PPI。真正的 phone 带有各种硬件组件。尽管真实 phone 和模拟器的规格相同,但真实 phone 呈现的东西不同,它的缩放比例也不同。我的建议是尝试 运行 你的应用程序。在更多的物理设备上并与仿真器进行比较,其中一个等效规格的结果不会有太大差异。

but can anybody explain why an emulated version is more accurate than the real device?

不是。设备就是设备。


DisplayMetricsxdpiydpi上是实际的物理密度值。例如,the documentation for xdpi has:

The exact physical pixels per inch of the screen in the X dimension.

在您的问题中,您声明该设备具有 "a real PPI of 258"。这符合您从 DisplayMetrics 获得的值,请记住像素很少是方形的,因此 xdpiydpi 值很少完全相等。


density 的值基于制造商设置(我认为是 ro.sf.lcd_density in /system/build.prop)。为什么 LG 决定使用 xhdpi 而不是 hdpi,我不能说。如果我不得不猜测的话,他们认为现有应用程序在具有这种逻辑密度的设备上看起来更好。模拟器将使用自己的算法。具有类似屏幕的另一家制造商可能会选择 hdpi(模拟器选择的内容)。

densityDpi 的值直接来自 density