詳解Android TextView屬性ellipsize多行失效的解決思路
本文介紹了Android TextView屬性ellipsize多行失效的解決思路,分享給大家,具體如下:
多余文字顯示省略號(hào)的常規(guī)做法
android:ellipsize="end" //省略號(hào)顯示在末尾
android:ellipsize="middle" //省略號(hào)顯示在中間
但是設(shè)置android:maxLines="2" 以后,ellipsize的值end有效,middle無(wú)效,本方法解決middle無(wú)效的問(wèn)題
/** * 字符串顯示到textView, textView maxLines=2 * 如果字符串太長(zhǎng)顯示不下,則用省略號(hào)代替 * 省略號(hào)的位置在第一行末尾 * * @param textView 顯示字符串的view * @param str 要顯示的字符串 * @param width 顯示字符串的view的寬 * @return 處理后帶省略號(hào)的字符串 */ private String ellipsizeString(TextView textView, String str, int width) { Paint paint = textView.getPaint(); //文字總寬小于2倍的view寬,說(shuō)明小于2行,直接返回 if (paint.measureText(str) < 2 * width) { return str; } //存儲(chǔ)顯示到view的每行文字 List<String> list = new ArrayList<>(); int len = 0; int start, end = 0; while (len < str.length()) { len += end; int count = paint.breakText(str, end, str.length(), true, width, null); start = end; end = end + count; list.add(str.substring(start, end)); } //第一行文字末尾三個(gè)字符替換成省略號(hào) String line1 = list.get(0); line1 = line1.substring(0, line1.length() - 3) + "..."; //最后一行半的文字從末尾向前截取一行文字 String endLine = list.get(list.size() - 1); int endLineWidth = (int) paint.measureText(endLine); String minorEndLine = list.get(list.size() - 2); int minorCuteCount = paint.breakText(minorEndLine, 0, minorEndLine.length(), true, endLineWidth, null); String line2 = minorEndLine.substring(minorCuteCount, minorEndLine.length()) + endLine; return line1 + line2; }
代碼的核心方法
paint.measureText(str) //測(cè)量字符串的寬度 paint.breakText(str, end, str.length(), true, width, null); //計(jì)算指定寬度下顯示的字符串?dāng)?shù)量
都是api的方法,詳細(xì)見(jiàn)源碼
需要完善的地方,android設(shè)備的不同字符顯示的寬度不同,三個(gè)字母替比省略號(hào)三個(gè)點(diǎn)要寬,m字符比l字符占位要寬,所以上面的方法處理后的字符串并不能使省略號(hào)顯示到第一行末尾,有需要的可以在替換省略號(hào)那行代碼那里精確處理一下,思路可以用上面的兩個(gè)核心方法做一系列判斷。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)界面跳轉(zhuǎn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09android bitmap compress(圖片壓縮)代碼
android bitmap compress(圖片壓縮)代碼,需要的朋友可以參考一下2013-06-06Android實(shí)現(xiàn)網(wǎng)易嚴(yán)選標(biāo)簽欄滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)易嚴(yán)選標(biāo)簽欄滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android adb命令中pm工具的作用及用法說(shuō)明
這篇文章主要介紹了Android adb命令中pm工具的作用及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Android項(xiàng)目中使用HTTPS配置的步驟詳解
這篇文章主要給大家介紹了關(guān)于Android項(xiàng)目中使用HTTPS配置步驟的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06Android自定義SwipeRefreshLayout高仿微信朋友圈下拉刷新
這篇文章主要以社交APP的BOSS微信為例,介紹了Android自定義SwipeRefreshLayout高仿微信朋友圈下拉刷新,感興趣的小伙伴們可以參考一下2016-07-07monkeyrunner之電腦安裝驅(qū)動(dòng)(5)
這篇文章主要為大家詳細(xì)介紹了monkeyrunner之電腦安裝驅(qū)動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的答題系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01