Android獲取文字高度的三種方法
前言
本文是對(duì)獲取文字高度整理和總結(jié),參考資料源自 statcoverflow的一個(gè)回答。具體參看下面的參考鏈接
獲取文字高度的三個(gè)方法
- 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 : 被測(cè)量的文字
- start: 被測(cè)量文字的起始位置
- end: 被測(cè)量文字的終止位置,最大為文字的長(zhǎng)度
- rounds: 被測(cè)量文字
功能解釋
如果我們想要獲取一段string的精確高度,我們可以通過 paint.getTextBounds()方法來實(shí)現(xiàn)。
精確高度是指什么?舉例來說,下面的 Happy new year 這幾個(gè)文字中,三個(gè)單詞的高度是不同的。
高度等于最上面一個(gè)像素減去最下面一個(gè)像素的高度。
所以,三者的高度是不同的。如何獲取這三個(gè)高度呢?就是通過 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 就是我們目標(biāo)文字的最終高度。
但是需要注意的是,上面的到的Happy, new, year 這三個(gè)單詞的高度是不同的。
如果我們想將上面三個(gè)單詞處理成同一個(gè)高度,該怎么辦呢?
2 paint.getFontMetrics()
功能解釋
paint.getFontMetrics() 幫助我們獲取一段文字中字體的高度,注意這里說的是字體。使用這個(gè)方法,獲取一段文字的高度都是相同的。
這里,fm中幾個(gè)屬性需要注意一下 我們先來看下面這張圖。注意圖中的 line1 line2 line3
其中 line 1 表示 Ascent;line2 表示baseline;line3 表示 Decent。 下面的截圖中是我在一個(gè)demo中獲取的一段文字的高度。
Ascent的值 和 Decent的值都是相對(duì)于baseLine而言的。從baseLine出發(fā),向上為負(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
參考資料:stackoverflow.com/questions/3…
- Android8.1原生系統(tǒng)網(wǎng)絡(luò)感嘆號(hào)消除的方法
- Android開發(fā)實(shí)現(xiàn)消除屏幕鎖的方法
- Android實(shí)現(xiàn)文字動(dòng)態(tài)高亮讀取進(jìn)度效果
- Android 實(shí)現(xiàn)文字左右對(duì)齊
- Android基于AdapterViewFlipper實(shí)現(xiàn)的圖片/文字輪播動(dòng)畫控件
- Android Button按鈕點(diǎn)擊背景和文字變化操作
- Android實(shí)現(xiàn)文字滾動(dòng)播放效果的代碼
- Android實(shí)現(xiàn)文字下方加橫線
- android命令行模擬輸入事件(文字、按鍵、觸摸等)
- Android實(shí)現(xiàn)文字消除效果
相關(guān)文章
Android 鍵盤開發(fā)知識(shí)點(diǎn)總結(jié)
這篇文章我們給大家總結(jié)了Android 鍵盤開發(fā)的相關(guān)知識(shí)點(diǎn)內(nèi)容以及開發(fā)心得,有需要的朋友參考學(xué)習(xí)下。2018-06-06Android透明化和沉浸式狀態(tài)欄實(shí)踐及源碼分析
這篇文章主要介紹了Android透明化和沉浸式狀態(tài)欄實(shí)踐及源碼分析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Android如何調(diào)用系統(tǒng)相機(jī)拍照
這篇文章主要為大家詳細(xì)介紹了Android如何調(diào)用系統(tǒng)相機(jī)拍照的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09Android開發(fā)實(shí)現(xiàn)TextView顯示豐富的文本
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)TextView顯示豐富的文本,涉及Android中TextView的使用技巧,需要的朋友可以參考下2015-12-12Android自定義PopupWindow實(shí)現(xiàn)炫酷的IOS對(duì)話框效果
這篇文章主要給大家介紹如何在android中實(shí)現(xiàn)高仿ios對(duì)話框效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05Android的HTTP操作庫(kù)Volley的基本使用教程
這篇文章主要介紹了Android的HTTP操作庫(kù)Volley的基本使用教程,包括JSON請(qǐng)求與圖片加載等用法的實(shí)例,需要的朋友可以參考下2016-05-05Android手機(jī)(設(shè)備)連接掃描槍掃碼遇到的問題
這篇文章給大家分享了Android手機(jī)(設(shè)備)連接掃描槍掃碼遇到的問題以及解決辦法,有需要的參考下。2018-07-07Android 用Time和Calendar獲取系統(tǒng)當(dāng)前時(shí)間源碼分享(年月日時(shí)分秒周幾)
這篇文章主要介紹了Android 用Time和Calendar獲取系統(tǒng)當(dāng)前時(shí)間源碼分享,包括年月日時(shí)分秒周幾的源碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01