国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳解Android TextView屬性ellipsize多行失效的解決思路

2019-12-12 00:43:40
字體:
供稿:網(wǎng)友

本文介紹了Android TextView屬性ellipsize多行失效的解決思路,分享給大家,具體如下:

多余文字顯示省略號的常規(guī)做法

android:ellipsize="end" //省略號顯示在末尾

android:ellipsize="middle" //省略號顯示在中間

但是設(shè)置android:maxLines="2" 以后,ellipsize的值end有效,middle無效,本方法解決middle無效的問題

/**  * 字符串顯示到textView, textView maxLines=2  * 如果字符串太長顯示不下,則用省略號代替  * 省略號的位置在第一行末尾  *  * @param textView 顯示字符串的view  * @param str  要顯示的字符串  * @param width 顯示字符串的view的寬  * @return 處理后帶省略號的字符串  */ private String ellipsizeString(TextView textView, String str, int width) {  Paint paint = textView.getPaint();  //文字總寬小于2倍的view寬,說明小于2行,直接返回  if (paint.measureText(str) < 2 * width) {   return str;  }  //存儲顯示到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));  }  //第一行文字末尾三個字符替換成省略號  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) //測量字符串的寬度 paint.breakText(str, end, str.length(), true, width, null); //計算指定寬度下顯示的字符串?dāng)?shù)量 

都是api的方法,詳細(xì)見源碼

需要完善的地方,android設(shè)備的不同字符顯示的寬度不同,三個字母替比省略號三個點要寬,m字符比l字符占位要寬,所以上面的方法處理后的字符串并不能使省略號顯示到第一行末尾,有需要的可以在替換省略號那行代碼那里精確處理一下,思路可以用上面的兩個核心方法做一系列判斷。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁海县| 昭通市| 青川县| 昌黎县| 分宜县| 公主岭市| 九龙县| 芦山县| 新宾| 德阳市| 宁化县| 眉山市| 云阳县| 林州市| 麻栗坡县| 赤壁市| 铜鼓县| 泰州市| 雅江县| 台州市| 安龙县| 陆丰市| 额济纳旗| 新绛县| 什邡市| 陆川县| 巴楚县| 高要市| 岑溪市| 大理市| 庆阳市| 鲁甸县| 江陵县| 射阳县| 玉树县| 蓝田县| 赤峰市| 广昌县| 扬州市| 沙河市| 黄龙县|