安卓显示单位详解(dpi, px, dip, dp, sp)
Contents
术语和概念
在xml文件中,开发者通常需要指定一系列长度,比如:30px
,2in
, 5sp
,安卓开发者文档里都分别给出了定义。
- dpi
先说dpi,但这个单位不属于安卓layout中可以使用的单位。
Dots per inch,屏幕像素密度。描述的是屏幕显示的能力,与设备有关。dpi越大,设备的精细程度越高,屏幕看起来也就越清楚。
dpi的计算方法
- 查询设备的分辨率(比如800*400)和屏幕尺寸(比如3.7英寸)
- 计算dpi公式如下
$DiagonalPixel = \sqrt{width^2-height^2}$, 所以DPI=933/3.7=252
接下来几个是实际开发中会用到的单位
- _dp_
Density-independent Pixels(dp/dip), 是一个基于显示器物理密度的抽象单位。在160dpi的屏幕上,1dp的大小约等于1px。在高像素密度的设备上显示的时候,用于绘制1dp的像素点会增加;同样在低像素密度的设备上用于显示1dp的像素点会减少。dp和像素点之间的转换率会随着屏幕像素密度发生改变。使用dp能够很便捷的使得版面在不同的设备上,作出适宜的调整。 - _sp_
Scale-independent Pixels,有点类似于dp,但是也收到用户设置系统字体大小的影响。安卓开发文档中,推荐使用sp指定字体的大小,这样使其不仅可以随着屏幕的像素密度调整大小,也会随着用户字体的大小而调整。 - _px_
像素,对应屏幕上的真实像素大小。安卓开发手册中不推荐使用这个单位,因为实际的显示会随着屏幕的不同而发生变化。不同的设备,每英尺包含的像素点的个数不同。 - _pt_
Points,就是一个点。如果是72dpi的屏幕,那么就是1pt的长度就等于1英尺的1/72。 - _mm_
毫米,说的就是物理上的长度。 - _in_
英尺,物理长度。
实例演示
Reference
[1] Android developers’ guild
[2] Android手机分辨率基础知识
[3] What is the difference between “px”, “dp”, “dip” and “sp” on Android?