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
也就是說在 Android 中, 1pt 大概等於 2.22sp
以上供參考,如果 UI 能夠以 sp 為單位提供設計是最好的,如果設計中沒有 sp
的概念,則開發人員也可以通過適當的換算取近似值。
本文連結http://www.cxybl.com/html/wyzz/CSS/20120614/30134.html