1. 程式人生 > 程式設計 >Android獲取文字高度的三種方法

Android獲取文字高度的三種方法

前言

本文是對獲取文字高度整理和總結,參考資料源自 statcoverflow的一個回答。具體參看下面的參考連結

獲取文字高度的三個方法

  • paint.getTextBounds(String text,int start,int end,Rect bounds)
  • paint.getFontMetrics()
  • StaticLayout

1 paint.getTextBounds(String text,Rect bounds)

引數解釋

  • text : 被測量的文字
  • start: 被測量文字的起始位置
  • end: 被測量文字的終止位置,最大為文字的長度
  • rounds: 被測量文字

功能解釋

如果我們想要獲取一段string的精確高度,我們可以通過 paint.getTextBounds()方法來實現。

精確高度是指什麼?舉例來說,下面的 Happy new year 這幾個文字中,三個單詞的高度是不同的。

高度等於最上面一個畫素減去最下面一個畫素的高度。

Android獲取文字高度的三種方法

所以,三者的高度是不同的。如何獲取這三個高度呢?就是通過 paint.getTextBounds()方法。

 String temp = "Happy"; //被獲取的文字
 Rect rect = new Rect();
 Paint paint = new Paint();
 paint.getTextBounds(temp,temp.length(),rect);
 int height = rect.height();

得到的height 就是我們目標文字的最終高度。

但是需要注意的是,上面的到的Happy,new,year 這三個單詞的高度是不同的。

如果我們想將上面三個單詞處理成同一個高度,該怎麼辦呢?

2 paint.getFontMetrics()

功能解釋

paint.getFontMetrics() 幫助我們獲取一段文字中字型的高度,注意這裡說的是字型。使用這個方法,獲取一段文字的高度都是相同的。

這裡,fm中幾個屬性需要注意一下 我們先來看下面這張圖。注意圖中的 line1 line2 line3

Android獲取文字高度的三種方法

其中 line 1 表示 Ascent;line2 表示baseline;line3 表示 Decent。 下面的截圖中是我在一個demo中獲取的一段文字的高度。

Android獲取文字高度的三種方法

Ascent的值 和 Decent的值都是相對於baseLine而言的。從baseLine出發,向上為負,向下為正。

demo程式碼如下:

 Paint paint = new Paint();
 Paint.FontMetrics fm = paint.getFontMetrics();
 float height1 = fm.descent - fm.ascent;
 float height2 = fm.bottom - fm.top + fm.leading;

其中 height1 表示文字的高度, height2表示行高。注意這兩者的區別。fm.leading 表示行間距。

總結

到此這篇關於Android獲取文字高度的三種方法的文章就介紹到這了,更多相關Android獲取文字高度內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!

參考資料:stackoverflow.com/questions/3…