天天看點

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需要一個積分,上傳時沒注意,新手也不知道怎麼修改,有需要的可以私我,我會盡量提供幫助。