多余文字显示省略号的常规做法

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 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字符占位要宽,所以上面的方法处理后的字符串并不能使省略号显示到第一行末尾,有需要的可以在替换省略号那行代码那里精确处理一下,思路可以用上面的两个核心方法做一系列判断。

android textview ellipsize汉字数字混合,Android TextView属性ellipsize多行失效的解决思路...相关推荐

  1. android ellipsize 多行,详解Android TextView属性ellipsize多行失效的解决思路

    本文介绍了Android TextView属性ellipsize多行失效的解决思路,分享给大家,具体如下: 多余文字显示省略号的常规做法 android:ellipsize="end&quo ...

  2. android 设置听筒模式切换,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  3. android关闭听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  4. android开发 听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...

  5. Android 科大讯飞语音识别 金额数字

    最近要在应用里面使用语音识别功能,老板选择了科大讯飞的技术,小可也就开始看文档啦: 这里只嵌入了语音识别,其他的语法什么的没有研究,有需要的各位看文档呗: 需要的资料 :只识别数字,若不过滤则把LSp ...

  6. android 车载app怎么开发,Android开发智能车载App(1)---android控件及属性介绍

    1.展示文本控件 TextView 属性名称 描述 android:text 设置显示文本. android:textSize 设置文字大小,推荐度量单位"sp",如"1 ...

  7. android的属性如何使用方法,Android第二大控件,EditText的属性和使用方法

    原标题:Android第二大控件,EditText的属性和使用方法 EditText与TextView非常相似,它甚至与TextView 共用了绝大部分XML属性和方法.EditText与TextVi ...

  8. android:ellipsize=end 不起作用,TextView ellipsize 属性使用,省略号不显示的问题

    TextView设置展示文本时,限制显示文本的长度,超出部分显示省略号或者跑马灯效果来回切换. android:ellipsize="" 常见属性如下 android:ellips ...

  9. android基础知识学习(1) TextView属性大全+单行显示长文本

    android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all)  androi ...

最新文章

  1. 数学知识-- 信赖域(Trust Region)算法是怎么一回事
  2. 使用Git上传项目到码云仓库
  3. 上下班同行有利于婚姻美满?
  4. 没有搜索_没有明显足够搜索量关键词的类目产品应该怎么办?
  5. GARFIELD@01-07-2005
  6. unix环境高级编程 pdf_UNIX环境高级编程——记录锁
  7. 初识Matlab遗传算法工具箱 ga
  8. SSLScan工具 获取SSL信息
  9. 科比职业生涯数据集分析
  10. 安装虚拟机提示未能启用服务器,win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的解决方法...
  11. 车载TBOX,4G北斗/GPS双模定位
  12. 技校计算机可以学平面设计吗,上技校可以学平面设计吗 去技校学平面设计还是自己在家自学好 - 兔课网...
  13. js实现Base64的加密解密
  14. 喷墨打印机如何批量制作二维码标签
  15. 45RF SOI CMOS
  16. BI分析工具选型:从PowerBI到FineBI的9个理由!
  17. 伪装为 吃鸡账号获取器 的QQ木马分析
  18. 人类史上首张黑洞照片亮相
  19. 超级bat病毒 ///整人必备///
  20. spring boot 国际化

热门文章

  1. input禁用判断禁用_如何在索尼电视上禁用运动平滑
  2. Trilevel Neural Architecture Search for Efficient Single Image Super-Resolution
  3. LeetCode每日一题(题1028)
  4. 【附源码】Java计算机毕业设计安卓基于Android的物流快递app(程序+LW+部署)
  5. argparse简要用法总结
  6. Windows10完美安装Go环境教程图解
  7. 稀疏性(sparse)知识点
  8. 深入浅出观察者模式—上课不听讲
  9. 人工智能-4计算机视觉和图像处理01
  10. system函数常见用法