术语和概念

在xml文件中,开发者通常需要指定一系列长度,比如:30px2in, 5sp,安卓开发者文档里都分别给出了定义。

  • dpi
    先说dpi,但这个单位不属于安卓layout中可以使用的单位。
    Dots per inch,屏幕像素密度。描述的是屏幕显示的能力,与设备有关。dpi越大,设备的精细程度越高,屏幕看起来也就越清楚。
    dpi的计算方法
  1. 查询设备的分辨率(比如800*400)和屏幕尺寸(比如3.7英寸)
  2. 计算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?