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

首頁 > 系統 > Android > 正文

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

2019-10-21 21:47:31
字體:
來源:轉載
供稿:網友

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

多余文字顯示省略號的常規做法

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

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

但是設置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); //計算指定寬度下顯示的字符串數量 

都是api的方法,詳細見源碼

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻城市| 陕西省| 开江县| 云南省| 屏边| 富宁县| 拜城县| 越西县| 无棣县| 彭泽县| 南漳县| 鹰潭市| 万年县| 玛多县| 横峰县| 鹿邑县| 平利县| 昆明市| 兴化市| 旌德县| 芦溪县| 桐梓县| 侯马市| 曲麻莱县| 五家渠市| 榆中县| 定陶县| 响水县| 吉木乃县| 九龙县| 嫩江县| 平谷区| 嘉善县| 芦溪县| 大余县| 梅州市| 逊克县| 三台县| 绥中县| 娄底市| 文登市|