Android獲取文字高度的三種方法
前言
本文是對獲取文字高度整理和總結(jié),參考資料源自 statcoverflow的一個回答。具體參看下面的參考鏈接
獲取文字高度的三個方法
- paint.getTextBounds(String text, int start, int end, Rect bounds)
- paint.getFontMetrics()
- StaticLayout
1 paint.getTextBounds(String text, int start, int end, Rect bounds)
參數(shù)解釋
- text : 被測量的文字
- start: 被測量文字的起始位置
- end: 被測量文字的終止位置,最大為文字的長度
- rounds: 被測量文字
功能解釋
如果我們想要獲取一段string的精確高度,我們可以通過 paint.getTextBounds()方法來實現(xiàn)。
精確高度是指什么?舉例來說,下面的 Happy new year 這幾個文字中,三個單詞的高度是不同的。
高度等于最上面一個像素減去最下面一個像素的高度。
所以,三者的高度是不同的。如何獲取這三個高度呢?就是通過 paint.getTextBounds()方法。
String temp = "Happy"; //被獲取的文字 Rect rect = new Rect(); Paint paint = new Paint(); paint.getTextBounds(temp, 0, temp.length(), rect); int height = rect.height();
得到的height 就是我們目標文字的最終高度。
但是需要注意的是,上面的到的Happy, new, year 這三個單詞的高度是不同的。
如果我們想將上面三個單詞處理成同一個高度,該怎么辦呢?
2 paint.getFontMetrics()
功能解釋
paint.getFontMetrics() 幫助我們獲取一段文字中字體的高度,注意這里說的是字體。使用這個方法,獲取一段文字的高度都是相同的。
這里,fm中幾個屬性需要注意一下 我們先來看下面這張圖。注意圖中的 line1 line2 line3
其中 line 1 表示 Ascent;line2 表示baseline;line3 表示 Decent。 下面的截圖中是我在一個demo中獲取的一段文字的高度。
Ascent的值 和 Decent的值都是相對于baseLine而言的。從baseLine出發(fā),向上為負,向下為正。
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表示行高。注意這兩者的區(qū)別。fm.leading 表示行間距。
總結(jié)
到此這篇關(guān)于Android獲取文字高度的三種方法的文章就介紹到這了,更多相關(guān)Android獲取文字高度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
參考資料:stackoverflow.com/questions/3…
相關(guān)文章
Android開發(fā)實現(xiàn)TextView顯示豐富的文本
這篇文章主要介紹了Android開發(fā)實現(xiàn)TextView顯示豐富的文本,涉及Android中TextView的使用技巧,需要的朋友可以參考下2015-12-12Android自定義PopupWindow實現(xiàn)炫酷的IOS對話框效果
這篇文章主要給大家介紹如何在android中實現(xiàn)高仿ios對話框效果,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05Android手機(設(shè)備)連接掃描槍掃碼遇到的問題
這篇文章給大家分享了Android手機(設(shè)備)連接掃描槍掃碼遇到的問題以及解決辦法,有需要的參考下。2018-07-07Android 用Time和Calendar獲取系統(tǒng)當前時間源碼分享(年月日時分秒周幾)
這篇文章主要介紹了Android 用Time和Calendar獲取系統(tǒng)當前時間源碼分享,包括年月日時分秒周幾的源碼,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-01-01