Her*_*ert 51 android measurement dimension
文件说160 dp(密度无关)等于1英寸.72磅也是1英寸.所以我不明白为什么android定义一个dp测量,而它似乎与点相同.任何人都可以解释一下吗?如果我可以使用pt,为什么要使用dp?
Joh*_*hey 74
Android文档曾经错误地指出,无论屏幕密度如何,160 dp始终等于1英寸.据报道,这是一个被接受并且文档更新的错误.
从更新的文档:
160 dp并不总是等于1英寸,它会随着屏幕尺寸和密度的不同而变化.在密度为160dpi(mdpi)的屏幕上,160 dp将等于1英寸.
无论屏幕密度如何,1 pt总是等于1/72 in.
这里的Android文档就在这里.
更新:
我做了一个小应用程序来尝试验证不同的大小.看起来上面的内容是正确的,至少在我的HTC Aria上显示.这是一个截图:

有趣的是,这些尺寸在eclipse图形编辑器中并不完全匹配.dp和sp大小根据屏幕大小和编辑器中的分辨率而变化.以下是编辑器的一些截图(左边是2.7英寸QVGA滑块,右边是10.1英寸WXGA,剪裁):

看看这些编辑器渲染是否与实际设备匹配将会很有趣.有人可以验证这些尺寸吗?如果有人想帮忙,我会在下面附上我的xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:padding="5sp" android:text="160dp"></TextView>
<View android:id="@+id/view1" android:layout_height="20dip" android:layout_width="160dp" android:layout_marginLeft="20sp" android:background="#FF22FF22"></View>
<TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:padding="5sp" android:text="72pt"></TextView>
<View android:id="@+id/view2" android:layout_height="20dip" android:layout_width="72pt" android:layout_marginLeft="20sp" android:background="#FF22FF22"></View>
<TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:padding="5sp" android:text="1in"></TextView>
<View android:id="@+id/View01" android:layout_height="20dip" android:layout_width="1in" android:layout_marginLeft="20sp" android:background="#FF22FF22"></View>
<TextView android:layout_width="wrap_content" android:textSize="22sp" android:layout_height="wrap_content" android:text="160sp" android:padding="5sp" android:id="@+id/TextView01"></TextView>
<View android:layout_marginLeft="20sp" android:layout_width="160sp" android:id="@+id/View04" android:background="#FF22FF22" android:layout_height="20dip"></View>
<TextView android:layout_width="wrap_content" android:textSize="22sp" android:layout_height="wrap_content" android:padding="5sp" android:id="@+id/TextView02" android:text="160px"></TextView>
<View android:layout_marginLeft="20sp" android:id="@+id/View03" android:background="#FF22FF22" android:layout_height="20dip" android:layout_width="160px"></View>
<TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" android:padding="5sp" android:text="25.4mm"></TextView>
<View android:id="@+id/View02" android:layout_height="20dip" android:layout_marginLeft="20sp" android:background="#FF22FF22" android:layout_width="25.4mm"></View>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
编辑:在John的示例中添加了2个以上的设备.左侧是Samsung Nexus S(OS 2.3.3).在右侧,三星Galaxy Tab 10.1(OS 3.1).没有mods.

在Nexus S上,160dp略大于1英寸.所有正常的物理单位(in,mm,pt)都是相同的大小.我用尺子测量它,160 dp的棒比它应该大约1mm.而物理单位比他们应该短1毫米.
在标签上,所有条形都完全相同,比我用尺子测量的长1毫米.
Ste*_*yle 38
文件说160 dp(密度无关)等于1英寸.72磅也是1英寸.
这里的细微差别是160 dp(或dip)为大致 1英寸,而72 pt是恰好 1英寸.不同之处在于android如何将两个单位转换为像素,这取决于设备的屏幕密度.
单个dp是px160 dpi的设备上的单个.Android使用设备所属的"密度桶",并将转换器乘以转换dp为px.
Bucket | DPI | Scaler
---------------------
ldpi | 120 | 0.75
mdpi | 160 | 1.00
tvdpi | 213 | 1.33
hdpi | 240 | 1.50
xhdpi | 320 | 2.00
xxhdpi | 480 | 3.00
Run Code Online (Sandbox Code Playgroud)
dppx按照这个公式进行转换:dp * scaler = px.
pt在任何屏幕密度上,单个正好是1/72英寸.Android转换pt为px使用设备屏幕的精确dpi(xdpi和ydpi).
ptpx按照这个公式进行转换:pt / 72 * dpi = px.
所以我不明白为什么android定义一个dp测量,而它似乎与点相同.任何人都可以解释一下吗?如果我可以使用pt,为什么要使用dp?
举个例子,在160 dpi设备上显示160 dp和72 pt.160 dpi设备落入mdpi密度桶中,缩放器为1.0.使用上面的公式转换为px.
160 dp * 1.0 = 160 px
72 pt / 72 * 160 = 160 px
Run Code Online (Sandbox Code Playgroud)
在170 dpi设备上怎么样?170 dpi的设备落入mdpi密度桶,缩放器为1.0.
160 dp * 1.0 = 160 px
72 pt / 72 * 170 = 170 px
Run Code Online (Sandbox Code Playgroud)
在150 dpi设备上怎么样?150 dpi的设备落入mdpi密度桶,缩放器为1.0.
160 dp * 1.0 = 160 px
72 pt / 72 * 150 = 150 px
Run Code Online (Sandbox Code Playgroud)
故事的寓意是,dp保持精确的尺寸并有助于保持性能,允许一些物理尺寸变化取决于设备密度.另一方面,pt每个密度的物理尺寸完全相同,导致使用的数量不同px,如果在图像上使用,可能会影响性能并导致混叠和伪影.dp除非要求绝对精确的物理尺寸(屏幕上有尺子等),否则建议使用.
我已经在Android的维度单元上写了一篇深度博客,它提供了更多信息和示例代码 - 了解Android中的密度独立性
| 归档时间: |
|
| 查看次数: |
37495 次 |
| 最近记录: |