Android 測量文字寬度的實例方法
最近在寫 APK 時遇到了需要獲取文本寬度的需求。其實就是要自己寫一個算法以實現(xiàn)文本超長自動換行的功能。
在實現(xiàn)這一功能時發(fā)現(xiàn)了原來在 Android 中測量文本的長度,或者說寬度可以分兩種情況:
1、測量絕對文本的長度
2、測量相對文本的長度
首先必須聲明這兩個概念是筆者自己定義的,因為我實在找不著更貼切的詞句去形容它們了。
什么是絕對文本呢?
就是指那些字號、字體、粗細等屬性不受在所運行的硬件設備上的 Android 系統(tǒng)的配置所影響文本。例如:自定義View時通過Canvas繪制出來的文本;
而相對文本在使用上就廣泛很多了。例如直接用 TextView 展示的文本、網(wǎng)頁上的文本、手機短信內(nèi)容文本等。相對文本在字號、字體、粗細程度上除了受應用開發(fā)時的配置影響以外還會間接地受到系統(tǒng)設置的影響。例如在 Android 的系統(tǒng)設置 -- 顯示 -- 字體大小 中的配置就會間接地影響到相對文本的顯示效果。
這篇博文,就來記錄一下這兩種文本的測量長度的方法。
1、絕對文本長度的測量
絕對文本為了避免被系統(tǒng)配置影響到,通常都不使用 Android 自帶的控件來繪制文本。
比較常見的繪制文本的方式是通過 Canvas 的 drawText() 方法。
絕對文本的長度的測量通常是借助 Paint 來完成的,代碼也很簡單:
final String txt = "冠狀病毒是自然界廣泛存在的病毒,因該病毒形態(tài)在電鏡下觀察類似王冠而得名。"; Paint paint = new Paint(); paint.setTextSize(15); float length = paint.measureText(txt); Logger.d(TAG, "txt length:" + length);
這種測量方式得到的結果值是不隨系統(tǒng)顯示字號的改變而改變的。
2、相對文本長度的測量
最簡單的測量這種隨系統(tǒng)配置而改變屬性的文本的長度的方法就是借助于 Android 自身控件。這里貼出一種直接用 TextView 控件來測量的辦法:
final String txt = "冠狀病毒是自然界廣泛存在的病毒,因該病毒形態(tài)在電鏡下觀察類似王冠而得名。"; TextView tv = new TextView(this); tv.setTextSize(16); tv.setText(txt); TextPaint tp = tv.getPaint(); float length = Layout.getDesiredWidth(tv.getText().toString(), 0, tv.getText().length(), tp); Logger.d(TAG, "txt length:" + length); Logger.d(TAG, "screen width:" + ScannerApplication.getInstance().getHardware().getAppWidth()); ((FrameLayout)layout).addView(tv);
這種方法里同樣的字符串內(nèi)容與 TextView 配置,卻可以動態(tài)地根據(jù)系統(tǒng)的字體設置來測量文本長度。以下是同一段代碼中在系統(tǒng)設置中將字體大小分別設置為小、普通與超大時的測量結果:
系統(tǒng)字體為小號時的測量結果:
Activity: txt length:720.0 Activity: screen width:720

系統(tǒng)字體為普通時的測量結果:
Activity: txt length:864.0 Activity: screen width:720

系統(tǒng)字體為超大時的測量結果:
Activity: txt length:1116.0 Activity: screen width:720

以上就是 Android 應用開發(fā)中關于文本長度測量的兩種方法,各位同學根據(jù)自己的實際應用場景來選擇使用即可。感謝大家的學習和對腳本之家的支持。
相關文章
Android?Flutter控件封裝之視頻進度條的實現(xiàn)
這篇文章主要來和大家分享一個很簡單的控制器封裝案例,包含了基本的播放暫停,全屏和退出全屏,文中的示例代碼講解詳細,感興趣的可以了解一下2023-06-06
詳解如何在Android studio中更新sdk版本和build-tools版本
這篇文章主要介紹了如何在Android studio中更新sdk版本和build-tools版本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
解析離線安裝Eclipse的Android ADT開發(fā)插件的具體操作(圖文)
本篇文章是對離線安裝Eclipse的Android ADT開發(fā)插件的具體操作進行了詳細的分析介紹,需要的朋友參考下2013-05-05
Android 簡單的彈出框(在屏幕中間,傳string[],根據(jù)內(nèi)容框框大小自適應)
這篇文章主要介紹了Android 簡單的彈出框(在屏幕中間,傳string[],根據(jù)內(nèi)容框框大小自適應),需要的朋友可以參考下2017-04-04

