如何正確的計算單行文字高度,這個問題暫不說應用場景,這裏單說技術,剛開始我查過好多相似的資料,解釋的很單純也很乾脆,可是有個一個問題計算的結果和實際效果差了一個像素,(也許有大佬要問一個像素你都能看出來,厲害了我滴鍋,固然一個像素我確定看不出來,這裏若是是一行一個像素,當不少行的時候哪?),這時候我不知道也不肯定特麼的是計算方式的問題仍是哪裏的問題。後來我經過TextView來進行了一次相似的測量,發現和以前的方式結果不同,可是結果倒是我但願的結果,買噶扥,我滴天。那麼問題來了,是計算方法的問題仍是特麼的Google的問題。app
這個是個問題?佈局
帶着這個問題,我首先想到是Google源碼是如何測試TextView的高度。能夠深刻到源碼中去查看,這裏暫不說源碼,你們本身手動看下便可,這裏緣由最主要就是Google進行測量的時候不會使用小數去測量和佈局(這裏句話是重點)。下邊看我正確的測試代碼測試
1 FragmentActivity activity = getActivity(); 2 Paint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 3 float typeValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, activity.getResources().getDisplayMetrics()); 4 paint.setTextSize(typeValue); 5 Paint.FontMetrics fontMetrics = paint.getFontMetrics(); 6 int bottom = (int) Math.ceil(fontMetrics.bottom); 7 int top = (int) Math.floor(fontMetrics.top); 8 int textHeight = bottom - top;
這裏須要說的就是Math這個類,主要就是把對應的小數轉換成整數,並且對於正小數皆是向上取整數,負數小數向下取整。這樣雖然算出的高度要比實際的高度要大,可是卻和Google中TextView的高度計算同樣。至於若是取捨,你們能夠根據須要進行選擇。spa
這裏還有另外一個方法,算是比較官方吧,Android本身來計算的一種方式code
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();
如上兩種方式皆可實現單行高度測量,至於如何選擇看自身須要。blog