ppi: 像素密度,pixels per inch(1inch=2.54cm),即每英寸屏幕所拥有的像素数。像素密度=√{(长度像素数^2+宽度像素数^2)}/ 屏幕尺寸。
dpi: dots per inch,每英寸点数,指印刷业中的打印精度。在Android官方开发指南中,与ppi含义相同,也表示每英寸的像素数。
resolution: 指手机屏幕水平和竖直方向的像素个数。例如FHD分辨率,即full high definition,也称1080P分辨率或成分辨率为1080*1920。
联系以上三个概念,物理尺寸5.0英寸分辨率为1920x1080的屏幕像素密度为441PPI,属于xxhdpi范围。
px: 物理像素,在分辨率高(即dpi大)的屏幕上显示较小。
dp: device independent pixels,早期也写作dip,密度无关像素。在不同dpi的屏幕上以不同的px显示。
sp: scale-independent pixels,是dp的一种,这种像素会受用户字体偏好设置的影响,一般用作字体的尺寸
dp、sp为抽象像素,Android 在运行时会自动将sp、dp的值转换为像素单位。
官方转换公式: pixels = dps * (ppi /160),系数为ppi/160,例如对于上述1080p的屏幕,px=dp*441/160,画一条320dp的横线,将占屏幕的882/1080
160dpi的屏幕上(即HVGA,由于一般像素都是正方形,所以一般长宽方向上的分辨率相同),dp到px的转化系数(像素密度)为1,此时1px=1dp=1sp。
注1:文字的尺寸一律用sp单位,视图的尺寸一律使用dp单位。
注2:在屏幕上画一条细的分隔线时(用dp和sp会模糊):<View layout_width="match_parent" layout_height="1px"/>
注3:android:layout_weight设置视图相对宽度:<android:layout_width="0dp" android:layout_weight="1"/>
注4:margin是边距,是指视图之间的间隔;padding是内边距,是指视图上的内容区域距其边界的距离
参考资料:
[1] http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android
[2] Android Programming: The Big Nerd Ranch Guide §8.4.2 Page133
[3] https://en.wikipedia.org/wiki/Dots_per_inch
[4] http://blog.csdn.net/zhaokaiqiang1992
[5] http://developer.android.com/guide/topics/resources/more-resources.html#Dimension