1、概述
過去,程式員通常以像素為機關設計計算機使用者界面。例如:圖檔大小為80×32像素。這樣處理的問題在于,如果在一個每英寸點數(dpi)更高的新顯示器上運作該程式,則使用者界面會顯得很小。在有些情況下,使用者界面可能會小到難以看清内容。由此我們采用與分辨率無關的度量機關來開發程式就能夠解決這個問題。android應用開發支援不同的度量機關。
2、度量機關含義
dip: device independent pixels(裝置獨立像素). 不同裝置有不同的顯示效果,這個和裝置硬體有關,一般我們為了支援wvga、hvga和qvga 推薦使用這個,不依賴像素。
dp: dip是一樣的
px: pixels(像素). 不同裝置顯示效果相同,一般我們hvga代表320x480像素,這個用的比較多。
pt: point,是一個标準的長度機關,1pt=1/72英寸,用于印刷業,非常簡單易用;
sp: scaled pixels(放大像素). 主要用于字型顯示best for textsize。
in(英寸):長度機關。
mm(毫米):長度機關。
3、度量機關的換算公式
在android源碼包typedvalue.java中,我們看如下函數:
public static float applydimension(int unit, float value,
displaymetrics metrics)
{
switch (unit) {
case complex_unit_px:
return value;
case complex_unit_dip:
return value * metrics.density;
case complex_unit_sp:
return value * metrics.scaleddensity;
case complex_unit_pt:
return value * metrics.xdpi * (1.0f/72);
case complex_unit_in:
return value * metrics.xdpi;
case complex_unit_mm:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
該函數功能:是把各機關換算為像素。
metrics.density:預設值為density_device / (float) density_default;
metrics.scaleddensity:預設值為density_device / (float) density_default;
metrics.xdpi:預設值為density_device;
density_device:為螢幕密度
density_default:預設值為160
4、螢幕密度:表示每英寸有多少個顯示點,與分辨率是兩個不同的概念。
android主要有以下幾種屏:如下表
螢幕
tyep
寬度
pixels
高度
尺寸
range(inches)
螢幕密度
qvga
240
320
2.6-3.0
low
wqvga
400
3.2-3.5
fwqvga
432
3.5-3.8
hvga
480
3.0-3.5
medium
wvga
800
3.3-4.0
high
fwvga
854
3.5-4.0
wvga
4.8-5.5
fwvga
5.0-5.8
備注
目前android預設的low=120 ;medium =160; high = 240
5、綜上所述
據px = dip * density / 160,則當螢幕密度為160時,px = dip
根據 google 的建議,textview 的字号最好使用 sp 做機關,而且檢視textview的源碼可知android預設使用sp作為字号機關。将dip作為其他元素的機關。