亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 測量文字寬度的實例方法

發布時間:2020-08-21 16:36:29 來源:腳本之家 閱讀:174 作者:laozhang 欄目:移動開發

最近在寫 APK 時遇到了需要獲取文本寬度的需求。其實就是要自己寫一個算法以實現文本超長自動換行的功能。

在實現這一功能時發現了原來在 Android 中測量文本的長度,或者說寬度可以分兩種情況:

1、測量絕對文本的長度

2、測量相對文本的長度

首先必須聲明這兩個概念是筆者自己定義的,因為我實在找不著更貼切的詞句去形容它們了。

什么是絕對文本呢?

就是指那些字號、字體、粗細等屬性不受在所運行的硬件設備上的 Android 系統的配置所影響文本。例如:自定義View時通過Canvas繪制出來的文本;

而相對文本在使用上就廣泛很多了。例如直接用 TextView 展示的文本、網頁上的文本、手機短信內容文本等。相對文本在字號、字體、粗細程度上除了受應用開發時的配置影響以外還會間接地受到系統設置的影響。例如在 Android 的系統設置 -- 顯示 -- 字體大小 中的配置就會間接地影響到相對文本的顯示效果。

這篇博文,就來記錄一下這兩種文本的測量長度的方法。

1、絕對文本長度的測量

絕對文本為了避免被系統配置影響到,通常都不使用 Android 自帶的控件來繪制文本。

比較常見的繪制文本的方式是通過 Canvas 的 drawText() 方法。

絕對文本的長度的測量通常是借助 Paint 來完成的,代碼也很簡單:

final String txt = "冠狀病毒是自然界廣泛存在的病毒,因該病毒形態在電鏡下觀察類似王冠而得名。";
Paint paint = new Paint();
paint.setTextSize(15);
float length = paint.measureText(txt);
Logger.d(TAG, "txt length:" + length);

這種測量方式得到的結果值是不隨系統顯示字號的改變而改變的。

2、相對文本長度的測量

最簡單的測量這種隨系統配置而改變屬性的文本的長度的方法就是借助于 Android 自身控件。這里貼出一種直接用 TextView 控件來測量的辦法:

final String txt = "冠狀病毒是自然界廣泛存在的病毒,因該病毒形態在電鏡下觀察類似王冠而得名。";
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);

這種方法里同樣的字符串內容與 TextView 配置,卻可以動態地根據系統的字體設置來測量文本長度。以下是同一段代碼中在系統設置中將字體大小分別設置為小、普通與超大時的測量結果:

系統字體為小號時的測量結果:

Activity: txt length:720.0
Activity: screen width:720

Android 測量文字寬度的實例方法

系統字體為普通時的測量結果:

Activity: txt length:864.0
Activity: screen width:720

Android 測量文字寬度的實例方法

 

系統字體為超大時的測量結果:

Activity: txt length:1116.0
Activity: screen width:720

Android 測量文字寬度的實例方法

以上就是 Android 應用開發中關于文本長度測量的兩種方法,各位同學根據自己的實際應用場景來選擇使用即可。感謝大家的學習和對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会东县| 白沙| 南和县| 滦平县| 陇西县| 德惠市| 满城县| 大埔区| 隆林| 革吉县| 玛曲县| 紫金县| 白河县| 永善县| 兴义市| 济阳县| 洛南县| 托克托县| 确山县| 四平市| 察哈| 庆元县| 从江县| 敦化市| 平度市| 和平区| 凌云县| 邵阳市| 浙江省| 都安| 十堰市| 抚宁县| 龙门县| 章丘市| 临潭县| 日照市| 平利县| 鄱阳县| 南充市| 宜川县| 山西省|