android ellipsize 多行,详解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 ellipsize 多行,详解Android TextView属性ellipsize多行失效的解决思路相关推荐
- android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET
收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...
- android:stretchcolumns=quot;*quot;,详解Android TableLayout中stretchColumns、shrinkColumns的用法...
详解Android 中TableLayout中stretchColumns.shrinkColumns的用法 android:stretchColumns="1" android: ...
- android uri图片压缩,详解android 通过uri获取bitmap图片并压缩
详解android 通过uri获取bitmap图片并压缩 很多人在调用图库选择图片时会在onactivityresult中用media.getbitmap来获取返回的图片,如下: uri mimage ...
- android led闪烁功能,详解Android应用层制作LED指示灯
详解Android应用层制作LED指示灯 在Java应用层修改LED指示灯的颜色,这个花了我半天时间, 才实现该功能! public class LEDActivity extends Activit ...
- android任务 进程 线程详解,Android任务、进程、线程详解
singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...
- Android编程之SparseArrayE详解
Android编程之SparseArrayE详解
Android编程之SparseArray<E>详解 分类:Android2012-09-01 13:139412人阅读评论(5)收藏举报 android编程delete存储list 最近 ...
- 简诉android源代码编译过程,详解Android源码的编译
在这里我们将介绍的是Android源码的编译,主要基于Android 1.0环境下.希望对大家有所帮助. 本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于An ...
- android布局优化 工具,详解Android布局优化
怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...
- Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.
目录 一.问题描述 二.解决方案 2.1 开启CPU虚拟化 2.2 禁用Hyper-V 2.3 使用管理员命令行在驱动程序包中执行"silent_install.bat" 一.问题 ...
最新文章
- S5700三层交换机 复杂网络环境设置默认路优先级实战
- hashmap实现倒排索引——查询多个单词出现在多个句子中
- 第一个java程序(hdu 1001)
- Prototype1.5.1源代码解读分析-3
- 服务器配置RAID5(3块硬盘做RAID5,另外再弄一块做数据冗余盘)
- 如何打开浏览器的TLS 1.1 TLS 1.2支持
- Linux杂谈之unzip命令
- Linux下使用QQ
- TOGAF ADM指导
- 工程导论-----创造力
- 【清单】边角知识清单
- Android实战:CoolWeather酷欧天气(加强版数据接口)代码详解(上)
- 打小都说我聪明,自从学了Linux,我才如梦初醒
- 上传图片查看上传的图片
- 在Windows 10下搭建Android开发环境
- BlackBerry 软件全球现已部署超过2.15亿辆汽车
- 如何让自己像打王者荣耀一样发了疯、拼了命的学习?
- 原装苹果手机_苹果手机换屏的“学问”这么多,一招教你快速辨别iPhone X原装屏...
- C语言复习内存 c2
- 基于JavaEE的jsp企业人事管理系统_JSP网站设计_SqlServer数据库设计