【问题标题】:Why does a higher pixel density device have less screen real estate? (Eclipse AVD)为什么更高像素密度的设备屏幕空间更少? (日食 AVD)
【发布时间】:2025-11-25 01:45:01
【问题描述】:

在 Eclipse 的 AVD 中,我创建了两个相同的设备,除了它们的密度值。设备 1 的 abstracted LCD density 为 240;设备 2 有 160。两者的分辨率都是 480x800。

谁能解释一下为什么设备 1 的屏幕上的元素看起来“更大”?由于它们具有相同的分辨率,它们不应该显示相同数量的像素吗?如果有的话,由于设备 1 的密度更高,它不应该显示更多细节/屏幕空间吗?

设备 1

设备 2

截图 - (点击查看大图)

如上所示,我在两个设备上的随机屏幕位置绘制了一个半径为 15dp 的圆。设备 2 上的圆圈肯定更小,操作栏也是如此。这是为什么呢?

【问题讨论】:

    标签: android resolution avd dpi pixels


    【解决方案1】:

    您正在使用 dp 进行绘图,而不是物理像素。 dp 尝试从物理尺寸中抽象出来,给用户一个物理尺寸相同的 GUI 元素。因此,如果一台设备上的像素更小,您需要使用更多的物理像素来获得与像素更大的设备上相同的效果。

    所以: 800 像素/每英寸 240 像素 = 3 1/3 英寸(该屏幕尺寸的物理长度)。一个像素的大小:1 像素/每英寸 240 像素 = 0,004 英寸。 800 像素/每英寸 160 像素 = 5 英寸。一个像素的大小:1 像素/每英寸 160 像素 = 0,006 英寸。

    因此,在相同分辨率(像素数)的情况下,低密度设备中的像素明显更大(每个维度大约大 50%)。所以你需要less个物理像素来画圆来显示15 dp的圆。

    简单地说:低dpi意味着更大的像素。相同的分辨率(像素数)意味着较低 dpi 的设备具有更大的屏幕。

    因此,在物理设备上,这些圆圈在不同尺寸的设备上具有相同的物理尺寸。但是您的模拟器窗口具有相同 大小,出于速度原因,一个物理像素会映射到计算机屏幕上的一个物理像素。因此,您在低 dpi 设备上使用 less 像素,但使用相同大小的物理像素绘制它们。解决方案:您需要调整模拟器窗口的大小,使其与 real 大小相匹配。我只是无法访问我的 Android SDK 安装,但 IIRC 您可以在 AVD 启动选项中设置(计算机)屏幕 dpi,以便自动设置大小。

    以下是为保留真实设备比例而缩放的图像:

    如您所见,圆圈具有相同的物理尺寸,操作栏、图标和状态栏也是如此。

    【讨论】:

    • 谢谢,很好的回答。我使用screen size 设置启动每台设备以匹配您的答案(例如device 1device 2)。但这产生了两个大小相似的模拟器窗口,与您答案中不同大小的模拟器窗口不同。然后我继续重新启动它们,但使用相同的monitor dpi 值,并且生成的模拟器窗口更像你的答案。你觉得这听起来对吗?我是否应该始终将所有 AVD 设置为具有相同的 monitor dpi
    • 不,一直使用正确的显示器 dpi 并没有多大用处。结果将是窗口的大小与真实设备的大小相匹配。但是那有什么用呢?您需要模拟器来检查布局是否适用于您不拥有的设备类,但要测试 UX,您需要真实设备。作为权衡,缩放的模拟器窗口看起来像我的第二张图像一样脏,因为它们通常是按比例缩小的;您的显示器的 dpi 很可能比手机(100-120 dpi,而至少 160 到 ~300)。
    • 好点。但是,通过将模拟器窗口大小与实际设备大小相匹配,是否允许您检查以与密度无关的像素表示的 UI 元素在所有设备上是否具有相同的物理大小?例如,我将所有圆的半径定义为 15dp,因此无论设备如何,所有圆都将具有相同的物理尺寸。拥有匹配的模拟器窗口大小可以让您检查是否确实如此,不是吗?
    • 你想调试Android SDK和模拟器还是你自己的应用程序?
    • @his 我也面临同样的问题。但我无法理解如何解决这个问题。您能否详细说明如何解决此问题,以便在低密度设备中视图看起来不会更大