本文介绍了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多行失效的解决思路相关推荐

  1. android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET

    收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread  Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...

  2. android:stretchcolumns=quot;*quot;,详解Android TableLayout中stretchColumns、shrinkColumns的用法...

    详解Android 中TableLayout中stretchColumns.shrinkColumns的用法 android:stretchColumns="1" android: ...

  3. android uri图片压缩,详解android 通过uri获取bitmap图片并压缩

    详解android 通过uri获取bitmap图片并压缩 很多人在调用图库选择图片时会在onactivityresult中用media.getbitmap来获取返回的图片,如下: uri mimage ...

  4. android led闪烁功能,详解Android应用层制作LED指示灯

    详解Android应用层制作LED指示灯 在Java应用层修改LED指示灯的颜色,这个花了我半天时间, 才实现该功能! public class LEDActivity extends Activit ...

  5. android任务 进程 线程详解,Android任务、进程、线程详解

    singleTop模式,基本上于standard分歧,仅正在请求的Activity反好位于栈顶时,无所区别.此时,配放成singleTop的Activity,不再会构制新的实例加入到Task栈外,而是 ...

  6. Android编程之SparseArrayE详解 Android编程之SparseArrayE详解

    Android编程之SparseArray<E>详解 分类:Android2012-09-01 13:139412人阅读评论(5)收藏举报 android编程delete存储list 最近 ...

  7. 简诉android源代码编译过程,详解Android源码的编译

    在这里我们将介绍的是Android源码的编译,主要基于Android 1.0环境下.希望对大家有所帮助. 本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于An ...

  8. android布局优化 工具,详解Android布局优化

    怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...

  9. Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

    目录 一.问题描述 二.解决方案 2.1 开启CPU虚拟化 2.2 禁用Hyper-V 2.3 使用管理员命令行在驱动程序包中执行"silent_install.bat" 一.问题 ...

最新文章

  1. S5700三层交换机 复杂网络环境设置默认路优先级实战
  2. hashmap实现倒排索引——查询多个单词出现在多个句子中
  3. 第一个java程序(hdu 1001)
  4. Prototype1.5.1源代码解读分析-3
  5. 服务器配置RAID5(3块硬盘做RAID5,另外再弄一块做数据冗余盘)
  6. 如何打开浏览器的TLS 1.1 TLS 1.2支持
  7. Linux杂谈之unzip命令
  8. Linux下使用QQ
  9. TOGAF ADM指导
  10. 工程导论-----创造力
  11. 【清单】边角知识清单
  12. Android实战:CoolWeather酷欧天气(加强版数据接口)代码详解(上)
  13. 打小都说我聪明,自从学了Linux,我才如梦初醒
  14. 上传图片查看上传的图片
  15. 在Windows 10下搭建Android开发环境
  16. BlackBerry 软件全球现已部署超过2.15亿辆汽车
  17. 如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  18. 原装苹果手机_苹果手机换屏的“学问”这么多,一招教你快速辨别iPhone X原装屏...
  19. C语言复习内存 c2
  20. 基于JavaEE的jsp企业人事管理系统_JSP网站设计_SqlServer数据库设计

热门文章

  1. fidder抓包工具使用方法,完整流程
  2. 统计学中数据分布的偏度(skewness)和峰度(kurtosis)
  3. redis 的单线程和内部的网络模型
  4. 盛普向全球招募LeSoleil莱素理防治药物系列对COVID-19已知所有变异毒株的临床研究再验证合作机构的公告
  5. java获取页面点击次数_JSP 点击量统计
  6. 密码验证:8-20位必须包含大写字母,小写字母,数字组合,特殊字符
  7. 液压装置状态评估数据集
  8. Codeforces - Choosing The Commander
  9. CSDN上的第一个脚印
  10. 佛教对中华文化的贡献