2011-02-17 76 views
40

這是TextView的擴展。 getTextSize()setTextSize()沒有被覆蓋,我沒有擴展這些方法。編程1.6,API級別4.Android TextView setTextSize錯誤地增加文本大小

此代碼中的循環會導致每次迭代時大小乘以1.5,例如,如果大小最初讀取getTextSize 200,然後setTextSize(size)叫,getTextSize再次打電話回讀300

public void shrinkTest() { 
    float size = this.getTextSize(); 
    while (size > 8) { 
     this.setTextSize(size); 
     size = this.getTextSize(); 
    } 
} 

這是爲什麼?

回答

141

嘿,混合單位問題。似乎有點違反直覺,但這是一個簡單的修復。默認方法setTextSize(float)假定您輸入的是sp單位(縮放的像素),而getTextSize()方法返回確切的像素大小。

您可以通過使用替代setTextSize(TypedValue, float),像這樣解決這個問題:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 

這將確保你有相同的單位工作。使用的TypedValue像下面

19

setTextSize()getTextSize()與不同的單位一起工作。 set()的參數是密度無關的「縮放像素」,而get()則返回普通的舊像素。

+2

毆打拳頭。 :P – kcoppock 2011-02-17 17:34:47

3

通單位大小:

TypedValue.COMPLEX_UNIT_PX //像素

TypedValue.COMPLEX_UNIT_SP //縮放的像素

TypedValue.COMPLEX_UNIT_DIP //與設備無關的像素

setTextSize(TypedValue.COMPLEX_UNIT_SP,18)