如何正確測量文字高度

2022-08-26 20:21:09 字數 1476 閱讀 8383

如何正確的計算單行文字高度,這個問題暫不說應用場景,這裡單說技術,剛開始我查過好多類似的資料,解釋的很單純也很乾脆,但是有個乙個問題計算的結果和實際效果差了乙個畫素,(也許有大佬要問乙個畫素你都能看出來,厲害了我滴鍋,當然乙個畫素我肯定看不出來,這裡如果是一行乙個畫素,當很多行的時候哪?),這時候我不知道也不確定特麼的是計算方式的問題還是**的問題。後來我通過textview來進行了一次類似的測量,發現和之前的方式結果不一樣,但是結果卻是我希望的結果,買噶扥,我滴天。那麼問題來了,是計算方法的問題還是特麼的google的問題。

這個是個問題?

帶著這個問題,我首先想到是google原始碼是如何測試textview的高度。可以深入到原始碼中去檢視,這裡暫不說原始碼,大家自己手動看下即可,這裡原因最主要就是google進行測量的時候不會使用小數去測量和布局(這裡句話是重點)。下邊看我正確的測試**

1         fragmentactivity activity =getactivity();

2 paint paint = new

textpaint(paint.anti_alias_flag);34

paint.settextsize(typevalue);

5 paint.fontmetrics fontmetrics =paint.getfontmetrics();

6int bottom = (int

) math.ceil(fontmetrics.bottom);

7int top = (int

) math.floor(fontmetrics.top);

8int textheight = bottom -top;

這裡需要說的就是math這個類,主要就是把對應的小數轉換成整數,而且對於正小數皆是向上取整數,負數小數向下取整。這樣雖然算出的高度要比實際的高度要大,但是卻和google中textview的高度計算一樣。至於如果取捨,大家可以根據需要進行選擇。

這裡還有另乙個方法,算是比較官方吧,android自己來計算的一種方式

textview view = new

textview(activity);

view.settextsize(12);

view.settext("測試");

int widthmeasurespec = view.measurespec.makemeasurespec(0, view.measurespec.unspecified);

int heightmeasurespec = view.measurespec.makemeasurespec(0, view.measurespec.unspecified);

view.measure(widthmeasurespec, heightmeasurespec);

int textheight = view.getmeasuredheight();

如上兩種方式皆可實現單行高度測量,至於如何選擇看自身需要。

測量Dialog的寬度 高度

直接測量暫時沒有太好的解決方案,所以採用了曲線救國的策略。我們首先通過dialog.getwindow getdecorview 獲取到它的上層view,然後通過 view.measure measurespec.makemeasurespec 0,measurespec.unspecified m...

如何測量電壓?

1 電壓測量的方法一般分為直接測量法和間接測量法兩種。直接測量法在測量過程中,能從儀器 儀表上直接讀出被測參量的波形或數值。間按測量是先對各間按參量進行直接測量,再將測得的數值代入公式,通過計算得到待測參量。2 測量電壓的儀器一般有電壓表 示波器 交流毫伏表等。電壓表可以用來測量直流電壓 低頻交流電...

如何測量電流?

電流的測量 1.電阻取樣法 用電阻做取樣,一般就是講電阻放置在需要取樣電流的位置,通過測量電阻兩端的電壓值來反饋,進而確定電路中的電流大小。那麼取樣電阻的阻值一般要求比較小,這樣才能讓放進去的電阻不影響原電路中電流大小,以確保取樣精準。2.互感檢測法 互感檢測法,一般用在高電壓大電流場合 交流 在互...