1. 程式人生 > >android TextView空間的setTextSize()方法在真機上執行大小問題

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