显示单位 px 和 dip 以及 sp 的区别
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备
硬件有关,一般我们为了支持 WVGA、HVGA 和 QVGA cwj 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们 HVGA 代表320x480像素,这个用
的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示 best for textsize。
由此,根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看
TextView 的源码可知 Android 默认使用 sp 作为字号单位。
###################################################################
关于换算(以 sp 和 pt 为例)
查看 TextView 等类的源码,可知:
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
--------------------------
scaledDensity = DENSITY_DEVICE / (float) DENSITY_DEFAULT;
xdpi = DENSITY_DEVICE;
--------------------------
DENSITY_DEFAULT = DENSITY_MEDIUM = 160;
============================================
所以: 假设 pt 和 sp 取相同的值 1,则可设 1pt 和 1sp 之间系数为 x,
1 * DENSITY_DEVICE / 72 = x * 1 * DENSITY_DEVICE / 160 =>
x = 160 / 72 = 2.2222