如何正確測量文字高度

  如何正確的計算單行文字高度,這個問題暫不說應用場景,這裏單說技術,剛開始我查過好多相似的資料,解釋的很單純也很乾脆,可是有個一個問題計算的結果和實際效果差了一個像素,(也許有大佬要問一個像素你都能看出來,厲害了我滴鍋,固然一個像素我確定看不出來,這裏若是是一行一個像素,當不少行的時候哪?),這時候我不知道也不肯定特麼的是計算方式的問題仍是哪裏的問題。後來我經過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

相關文章
相關標籤/搜索