android TextView空間的setTextSize()方法在真機上執行大小問題
今天除錯一個專案,點選控制元件,放大或縮小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需要一個積分,上傳時沒注意,新手也不知道怎麼修改,有需要的可以私我,我會盡量提供幫助。