引用:http://www.cnblogs.com/duanweishi/p/4449588.html
Paint.setTextSize()單位為px尉共,Android系統(tǒng)中,默認(rèn)的單位是像素(px)弃锐。也就是說袄友,在沒有明確說明的情況下,所有的大小設(shè)置都是以像素為單位霹菊。Paint.setTextSize傳入的單位是px,TextView.setTextSize默認(rèn)傳入的單位是sp剧蚣。
如果實在記不住,那就看android sdk的源碼說明
另外還有這個事兒注意下:
使用如下代碼時旋廷,發(fā)現(xiàn)字號不會變大鸠按,反而會變小:
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,是一個標(biāo)準(zhǔn)的長度單位柏卤,1pt=1/72英寸冬三,用于印刷業(yè),非常簡單易用缘缚;
sp: scaled pixels(放大像素). 主要用于字體顯示best for textsize勾笆。