Android dp 单位与现实世界不匹配

Jar*_*ith 1 android android-layout samsung-mobile

我正在三星 Galaxy Note 3上进行测试,根据文档,其分辨率为 1080 x 1920 像素(约 386 ppi 像素密度)。我想弄清楚dp 中的屏幕宽度是多少,以便我可以正确应用并检查新的尺寸限定符。

我用一把好的 ole 尺子测量了屏幕宽度(纵向)= 71mm = 2.8 英寸 1080 / 2.8 = 386 ppi。太好了,这符合规定的密度。

我正在尝试计算屏幕的宽度是多少 dp 单位。

dp = px / (dpi / 160) 从这里
= 1080 / (386 / 160) = 1080 / 2.4125 = 447.7 dp

所以如果我这样做:

<TextView
android:id="@+id/density_test"
android:layout_width="447dp"
android:layout_height="wrap_content"
android:background="#ffff0000"
android:text="DENSITY TEST 447dp" />
Run Code Online (Sandbox Code Playgroud)

那么在我的 Galaxy Note 3 上,这个视图应该几乎与屏幕宽度一样。但事实并非如此,它更广泛。

因此,我将上面的视图设置为layout_width="300dp",用标尺测量了它的宽度,并根据此测试推断出实际屏幕宽度(以 dp 为单位):

300dp = 59 毫米

屏幕总宽度为71mm

因此推断屏幕宽度 dp = (71 / 59) * 300 = 361dp

361dp != 447.7dp

这里发生了什么?我觉得我一定是在做一些愚蠢的事情。

编辑:我尝试将布局文件放入 /res/layout-xhdpi 但没有效果。我想可能是通过 xhdpi / mdpi 缩放它,因为我在默认的 /res/layout 目录中有 xml。

在此输入图像描述

Qia*_*ian 5

实际像素大小是根据 dp 计算的,但不如公式 dp = px / (dpi / 160) 准确。事实上,它首先确定屏幕密度(ldpp、mdph、hdpi、xhdpi、xxhdpi、xxxhdpi),并使用该密度从 {0.75, 1.0, 1.5, 2.0, 3.0, (4.0)} 中获取一个比率。

在您的情况下,系统认为 386dpi 为 xxhdpi,因此它通过乘以 3.0 来计算该值,360dp 将恰好填充屏幕的宽度(1080p)