Android TextView 应用富文本后换行失效的问题
来源:互联网 发布:陈冠希淘宝店铺 编辑:程序博客网 时间:2024/06/06 13:11
问题的描述
由于项目的需求,需要实现TextView的富文本效果,TextView头部需要添加一张小图片,然后能支持部分文字变色可点击,
查询了部分资料是用SpannableString实现的。
<TextView android:maxLines="2" android:ellipsize="end" android:layout_width="match_parent" android:layout_height="wrap_content"/>
(我这里是限制2行,超出则以…结尾)但是后来发现应用富文本风格后,这个以…结束的效果失效了
问题分析
上网查询后不少人都遇到这个问题,主要的解决办法是截断字符段,把超出的部分用“…”替换,以达到我们的效果
解决办法
先说布局文件,TextView我是放在列表中,我这里是写了2个相同的TextView,底部一个设置不可见,设置为invisible,
不能设置为了gone。
(这里说下为啥要2个的原因:因为只有一个的时候,我的列表下拉刷新的时候,TEXTVIEW会有跳动的情况,为了优化这个体验我采用两个,如果有更好的办法请指出,谢谢)
布局文件
<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tvTempContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/app_black_color" android:maxLines="2" android:visibility="invisible" android:textSize="13sp"/> <TextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/app_black_color" android:maxLines="2" android:textSize="13sp"/></RelativeLayout>
底部一个TextView用于计算出第二行最后一个字符的位置,然后进行截断处理
Java代码部分 tempTextView用于计算,textView来显示结果
tempTextView.setText(feed.getContent());tempTextView.post(new Runnable() { @Override public void run() { String text; if (tvTempContent.getLineCount() >= 2) {//如果只有一行,就不需要做处理了 int lineEndIndex = tvTempContent.getLayout().getLineEnd(1);//第二行最后一个字符的位置 int lengthAll = tvTempContent.getText().length(); if (lineEndIndex >= lengthAll) {//说明没有超出2行 text = feed.getContent(); } else {//否则超出两行了 String endTag = "..."; //计算省略号的宽度 int endTagWidth = testStrWidth(tvTempContent, endTag); int replaceIndex = 1; //数字、符号、中文占用的宽度都不同,所以这里计算下需要替换的字符的个数,最多三个 //这里有人直接替换3个,有人替换1个字符,经过测试发现不同类型的字符,宽度是不一样的 //我当时写的demo上,如果是中文,省略号只需要占用1个字符,如果数字要2个,如果是逗号,要3个 //为了兼容这些情况,我做了如下的处理,去计算宽度后,再决定截取,最多截取三个 while (replaceIndex < 3) { String endText = tvTempContent.getText().subSequence(lineEndIndex - replaceIndex, lineEndIndex).toString(); if (testStrWidth(tvTempContent, endText) < endTagWidth) { replaceIndex ++; } else { break; } } text = tvTempContent.getText().subSequence(0, lineEndIndex - replaceIndex) + "..."; } } else { text = feed.getContent(); } //这里的text则是已经截取过的字符是带...结束的字符串,可以在这里做富文本处理 textView.setText(text); }});
最后出来的效果图
0 0
- Android TextView 应用富文本后换行失效的问题
- Android TextView富文本
- android textview富文本
- 关于android中TextView的富文本
- Android中TextView的富文本显示
- Android TextView富文本的使用
- Android中TextView富文本
- iframe制作富文本编辑器各个浏览器换行的问题
- cocos2dx中RichText富文本的换行问题
- Android TextView富文本、显示不同的颜色
- 彻底解决android中Textview控件文本自动换行问题
- Android TextView换行问题
- android textView 换行问题
- android textview换行问题
- Android TextView换行问题
- android TextView 换行问题
- Android 中textview显示富文本信息
- Android TextView 富文本加载实现
- jQuery的ID选择器
- 电池基础知识
- Android基础视图5
- java三种遍历集合的方法
- jQuery元素选择器(element)
- Android TextView 应用富文本后换行失效的问题
- jQuery类名选择器(.class)
- CentOS7 升级kernel
- 项目实战(二)后台批量插入数据库,前台进度条显示进度
- jQuery复合选择器
- Java HashMap实现原理 源码剖析
- 题目1020:最小长方形
- jQuery ancestor descendan选择器
- C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)