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

时间:2014-10-30 01:42:41

标签: android android-layout samsung-mobile

我正在测试一个Samsung Galaxy Note 3根据文档是1080 x 1920像素(~386 ppi像素密度)。我想弄清楚dp 中的屏幕宽度是什么,所以我可以正确应用并检查new size qualifiers

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

我正在试图弄清楚屏幕有多少dp单位。

  来自here

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" />

然后在我的Galaxy Note 3上,这个视图应该几乎完全是屏幕的宽度。 但事实并非如此,它的范围更广

所以我将上面的视图设置为layout_width="300dp",测量了我的标尺的宽度,并根据此测试推断了dp中的实际屏幕宽度:

  

300dp = 59mm

     

总屏幕宽度为71毫米

     

如此外推屏幕宽度,dp =(71/59)* 300 = 361dp

361dp!= 447.7dp

这里发生了什么?我觉得我必须做一些愚蠢的事。

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

enter image description here

1 个答案:

答案 0 :(得分:4)

实际像素大小是基于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)