android textview ellipsize汉字数字混合,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 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多行失效的解决思路...相关推荐
- android ellipsize 多行,详解Android TextView属性ellipsize多行失效的解决思路
本文介绍了Android TextView属性ellipsize多行失效的解决思路,分享给大家,具体如下: 多余文字显示省略号的常规做法 android:ellipsize="end&quo ...
- android 设置听筒模式切换,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...
- android关闭听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...
- android开发 听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是我做的是一个可以切换手机听筒模式和扬声器模式的APP,在其他手机上可以正常切换,但是在华为手机上切换失败,是什么原因? 是不是华为手机又其他方式?希望 ...
- Android 科大讯飞语音识别 金额数字
最近要在应用里面使用语音识别功能,老板选择了科大讯飞的技术,小可也就开始看文档啦: 这里只嵌入了语音识别,其他的语法什么的没有研究,有需要的各位看文档呗: 需要的资料 :只识别数字,若不过滤则把LSp ...
- android 车载app怎么开发,Android开发智能车载App(1)---android控件及属性介绍
1.展示文本控件 TextView 属性名称 描述 android:text 设置显示文本. android:textSize 设置文字大小,推荐度量单位"sp",如"1 ...
- android的属性如何使用方法,Android第二大控件,EditText的属性和使用方法
原标题:Android第二大控件,EditText的属性和使用方法 EditText与TextView非常相似,它甚至与TextView 共用了绝大部分XML属性和方法.EditText与TextVi ...
- android:ellipsize=end 不起作用,TextView ellipsize 属性使用,省略号不显示的问题
TextView设置展示文本时,限制显示文本的长度,超出部分显示省略号或者跑马灯效果来回切换. android:ellipsize="" 常见属性如下 android:ellips ...
- android基础知识学习(1) TextView属性大全+单行显示长文本
android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) androi ...
最新文章
- 数学知识-- 信赖域(Trust Region)算法是怎么一回事
- 使用Git上传项目到码云仓库
- 上下班同行有利于婚姻美满?
- 没有搜索_没有明显足够搜索量关键词的类目产品应该怎么办?
- GARFIELD@01-07-2005
- unix环境高级编程 pdf_UNIX环境高级编程——记录锁
- 初识Matlab遗传算法工具箱 ga
- SSLScan工具 获取SSL信息
- 科比职业生涯数据集分析
- 安装虚拟机提示未能启用服务器,win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的解决方法...
- 车载TBOX,4G北斗/GPS双模定位
- 技校计算机可以学平面设计吗,上技校可以学平面设计吗 去技校学平面设计还是自己在家自学好 - 兔课网...
- js实现Base64的加密解密
- 喷墨打印机如何批量制作二维码标签
- 45RF SOI CMOS
- BI分析工具选型:从PowerBI到FineBI的9个理由!
- 伪装为 吃鸡账号获取器 的QQ木马分析
- 人类史上首张黑洞照片亮相
- 超级bat病毒 ///整人必备///
- spring boot 国际化