对android的布局文件中常常用到的度量单位比较困惑,因此网上了解了一下,根据自己的了解,作如下整理和解释,有一些概念可能解释有误,留作日后改进。
1. 概念解释
(1)px--pixel, 像素,是一个数量单位,屏幕上实际的像素点单位,比如设定一个按钮的长度是100px,屏幕分辨率HVGA代表320×480 pixel。
(2)dpi--dot per inch,(dot是否可以理解为pixel?),是一个密度单位,屏幕像素密度,每英寸像素点的个数。
(3)density--屏幕密度,每英寸有多少个显示点,单位是dpi,dpi数越大,屏幕精细度越大。比如,屏幕密度是160dpi,240dpi。人们在提法上,往往把dpi等同于density,说的屏幕密度,屏幕像素密度往往是指同一个东西。
(4)dp--dip,device independent pixels,设备独立像素,是一个数量单位,与屏幕密度相关,不依赖像素。这个单位是为了在不同的屏幕密度上能够显示同样的大小。
(5)sp--scaled pixels,是一个数量单位,主要处理字体大小。android系统允许用户自定义字体大小(小,正常,大,超大等),当设为正常时,1sp=1dp=1/160=0.00625英寸。
(6)屏幕分辨率:只能说明屏幕总像素,不能说明屏幕精细度。需要综合屏幕分辨率和屏幕物理尺寸才能说明屏幕精细度。但是下面的屏幕名称,代表了这个屏幕的精细度。
-
VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;
-
HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320,density=160 dpi;
-
QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240,density=120 dpi;
-
WVGA:Wide Video Graphics Array;即:扩大的VGA,分辨率为800×480像素, density=240 dpi;
-
WQVGA:Wide Quarter VGA;即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×270,density=120 dpi;
以上几种屏幕说明屏幕的精细度不同,对于同一种屏幕(比如HVGA的屏幕),它的大小也是指定在一定范围的。
屏幕 | 宽度 | 高度 | 尺寸 | 大小 | 密度 |
Type | (Pixels) | (Pixels) | Range (inches) | Size | Group |
QVGA | 240 | 320 | 2.6 - 3.0 | Small | Low |
WQVGA | 240 | 400 | 3.2 - 3.5 | Normal | Low |
FWQVGA | 240 | 432 | 3.5 - 3.8 | Normal | Low |
HVGA | 320 | 480 | 3.0 - 3.5 | Normal | Medium |
WVGA | 480 | 800 | 3.3 - 4.0 | Normal | High |
FWVGA | 480 | 854 | 3.5 - 4.0 | Normal | High |
WVGA | 480 | 800 | 4.8 - 5.5 | Large | Medium |
FWVGA | 480 | 854 | 5.0 - 5.8 | Large | Medium |
2. 概念之间的关系
(1) 屏幕分辨率,density,屏幕物理尺寸大小的关系
density = pixs/inches(dpi)
屏幕分辨率是480×320,屏幕物理尺寸是3英寸×2英寸,
横向像素密度density = 480/3 = 160dpi;
纵向像素密度density = 320/2 = 160dpi;
大部分手机横向和纵向像素密度是相等的,因为大部分手机使用的像素点是正方形的。
(2) density,dp与px的关系
换算公式为pixs = dips * (density /160).
比如: 对于density = 240dpi的屏幕,画一个长度20dp,宽度10dp的按钮,
需要画的长像素数 = 20 * 240 / 160 = 30pixs;
需要画的宽像素数 = 10 * 240 / 160 = 15pixs;
还有另一种计算方式,Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),对应的密度比例因子dp/px为0.75,1, 1.5和2。则pixs = dp*a。比如,上面那个屏幕画同样的按钮:
需要画的长像素数 = 20 * 1.5 = 30pixs;
需要画的宽像素数 = 10 * 1.5 = 15pixs;
结论:相同的屏幕尺寸下,无论屏幕密度是多少,用dp表示的按钮的长宽都一样。程序最终都是以pix在屏幕上画出来的。
3. 使用
在屏幕上最终显示效果的影响因素有:屏幕的物理尺寸,屏幕像素密度dpi,使用何种单位(px,sp,dp等)表示图形的大小。
不建议使用px,因为同样的100px,在同样尺寸但不同dpi的屏幕上,显示的大小不同。一般来说,文字尺寸用“sp”,非文字尺寸用“dp”。