今天調試一個項目,點選控件,放大或縮小TextView中的文本字型大小
它在虛拟機上能正常運作,但在真機上出現錯誤
給段代碼:
viewText.setTextSize(viewText.getTextSize()-5);
System.out.println("viewTitle.getTextSize="+viewTitle.getTextSize());
每次點選,都會運作這段代碼
但根據我列印的日志資訊發現,結果是遞增的
于是我想到真機上運作setTextSize()方法并不是我們想象的那樣,裡面設定多少,它字型就是多少
建立了一個android項目,加入代碼(例子很簡單,隻附上關鍵性代碼)
tx.setTextSize(50.0f);
for(int i=0;i<5;i++){
System.out.println("tx.getTextSize()="+tx.getTextSize());
tx.setTextSize(tx.getTextSize()-5);
}
根據列印日志,輸出結果還是遞增的,我排除了原項目中代碼錯誤問題,專心研究這setTextSize
我每次增大減少的數,也許是運氣問題,當tx.setTextSize(tx.getTextSize()-25);時,輸出結果沒變動,不減少也不增加
我大膽猜想:隻有減的值是目前值的一半以上時,字型才會變小
為驗證猜想,重設代碼:
tx.setTextSize(70.0f);
for(int i=0;i<5;i++){
System.out.println("tx.getTextSize()="+tx.getTextSize());
tx.setTextSize(tx.getTextSize()-25);
}
結果值還是在增加,将25改成35,值不變,大于35字型開始變小
此刻,我想我發現了什麼........
附demo下載下傳:點選下載下傳
于是去看了下setTextSize的源碼,問題馬上就解決了,源碼就不講解了,很簡單的幾句代碼。
先上一小段代碼:
DisplayMetrics dm = getResources().getDisplayMetrics();
float value = value = dm.scaledDensity;
先得到手機的scaledDecsity
設定字型大小時,如設定18
用setTextSize(18/value)
那麼我們得到的getTextSize()為18
ps:我隻在我的真機上和2.3的模拟器上運作過,若有問題,歡迎提出!下載下傳demo需要一個積分,上傳時沒注意,新手也不知道怎麼修改,有需要的可以私我,我會盡量提供幫助。