引用:http://www.cnblogs.com/duanweishi/p/4449588.html
Paint.setTextSize()單位為px,Android系統(tǒng)中,默認的單位是像素(px)。也就是說,在沒有明確說明的情況下,所有的大小設(shè)置都是以像素為單位。Paint.setTextSize傳入的單位是px,TextView.setTextSize默認傳入的單位是sp。
如果實在記不住,那就看android sdk的源碼說明
另外還有這個事兒注意下:
使用如下代碼時,發(fā)現(xiàn)字號不會變大,反而會變?。?/p>
size = (int) mText.getTextSize() + 1;
mText.setTextSize(size);
后來發(fā)現(xiàn)getTextSize返回值是以像素(px)為單位的,而setTextSize()是以sp為單位的,兩者單位不一致才造成這樣的結(jié)果。
這里可以用setTextSize()的另外一種形式,可以指定單位:
setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
下面這樣就正常了:
size = (int) mText.getTextSize() + 1;
mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
下面是相關(guān)的一些類轉(zhuǎn)換
dp(dip): device independent pixels(設(shè)備獨立像素). 不同設(shè)備有不同的顯示效果,這個和設(shè)備硬件有關(guān),一般我們?yōu)榱酥С諻VGA、HVGA和QVGA 推薦使用這個,不依賴像素。
dp也就是dip,這個和sp基本類似。如果設(shè)置表示長度、高度等屬性時可以使用dp 或sp。但如果設(shè)置字體,需要使用sp。dp是與密度無關(guān),sp除了與密度無關(guān)外,還與scale無關(guān)。如果屏幕密度為160,這時dp和sp和px是一 樣的。1dp=1sp=1px,但如果使用px作單位,如果屏幕大小不變(假設(shè)還是3.2寸),而屏幕密度變成了320。那么原來TextView的寬度 設(shè)成160px,在密度為320的3.2寸屏幕里看要比在密度為160的3.2寸屏幕上看短了一半。但如果設(shè)置成160dp或160sp的話。系統(tǒng)會自動 將width屬性值設(shè)置成320px的。也就是160 * 320 / 160。其中320 / 160可稱為密度比例因子。也就是說,如果使用dp和sp,系統(tǒng)會根據(jù)屏幕密度的變化自動進行轉(zhuǎn)換。
px: pixels(像素). 不同設(shè)備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用于印刷業(yè),非常簡單易用;
sp: scaled pixels(放大像素). 主要用于字體顯示best for textsize。