我正在测试一个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。
答案 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)