我在Samsung Galaxy Note 3上进行测试,根据文档,该像素为1080 x 1920像素(〜386 ppi像素密度)。我想弄清楚dp中的屏幕宽度是多少,以便可以正确应用并检查new size qualifiers

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

我试图找出屏幕上有多少个dp单位。


  dp = px /(dpi / 160)from here
  = 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 = 59毫米
  
  屏幕总宽度为71mm
  
  因此,以dp外推屏幕宽度=(71/59)* 300 = 361dp


361dp = 447.7dp

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

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

最佳答案

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

10-08 03:16