解决TextView中MaxLines与ellipsize=end冲突问题

TextView控件有一个属性是ellipsize,指的是当文字内容长度超过TextView大小时显示问题,一般情况下我们都是用省略号表示,常用的情况有以下四种:

1,android:ellipsize = "end"    省略号在结尾

3,android:ellipsize = "start"   省略号在开头

3,android:ellipsize = "middle"     省略号在中间

4,android:ellipsize = "marquee"  跑马灯

但是我们遇到的问题是,这几个属性一般只有在设置了android:singleline = "true"的时候才有效,此时只能显示一行文字,但是当我们的TextView要显示多行文字,比如我们设置了android:maxLines="3"时,我们肯定不能设置android:singleline
= "true",此时的android:ellipsize=“end”就失去效果了。MaxLines与ellipsize=end冲突问题纠结我很久,在网上打了不少资料,加上自己工作中的实际情况,写了个工具类,测试了好几款手机都没有问题,把主要代码贴出来,请大家多指教!

/**

* 参数:maxLines 要限制的最大行数

* 参数:content  指TextView中要显示的内容

*/

public void setMaxEcplise(final TextView mTextView, final int maxLines, final String content) {

ViewTreeObserver observer = mTextView.getViewTreeObserver();

observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

mTextView.setText(content);

if (mTextView.getLineCount() > maxLines) {

int lineEndIndex = mTextView.getLayout().getLineEnd(maxLines - 1);

//下面这句代码中:我在项目中用数字3发现效果不好,改成1了

String text = content.subSequence(0, lineEndIndex - 3) + "...";

mTextView.setText(text);

}

else {

removeGlobalOnLayoutListener(mTextView.getViewTreeObserver(), this);

}

}

});

}

@SuppressWarnings("deprecation")

@SuppressLint("NewApi")

private void removeGlobalOnLayoutListener(ViewTreeObserver obs, OnGlobalLayoutListener listener) {

if (obs == null)

return;

if (Build.VERSION.SDK_INT < 16) {

obs.removeGlobalOnLayoutListener(listener);

}

else {

obs.removeOnGlobalLayoutListener(listener);

}

}

以上只是相关的方法代码,传入相应的参数就可以了。

时间: 2024-08-10 19:17:21

解决TextView中MaxLines与ellipsize=end冲突问题的相关文章

解决ScrollView中嵌套ListView滚动效果冲突问题

在ScrollView中嵌套使用ListView,ListView只会显示一行到两行的数据.起初我以为是样式的问题,一直在对XML文件的样 式进行尝试性设置,但始终得不到想要的效果.后来在网上查了查,ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起了冲 突,一般不建议两者套用. 下面说说具体解决方案.方案的主要思路就是根据ListView子项重置其高度. 解决方案代码如下: java代码: [html] view plain copy print? /** * 重

解决ViewPage中嵌套有ListView或者滑动手势等造成滑动的冲突

public class ViewPagerCompat extends ViewPager { //mViewTouchMode表示ViewPager是否全权控制滑动事件,默认为false,即不控制 private boolean mViewTouchMode = false; public ViewPagerCompat(Context context, AttributeSet attrs) { super(context, attrs); } public void setViewTou

共享库方案解决WAS中JAR包冲突

(一)证书导入解决方案 1.登录管理控制台. 2. 展开"安全性"并单击"SSL 证书和密钥管理".在"配置设置"下面,单击"管理端点安全配置". 3. 为 (cell):server5Cell01 管理作用域选择适当的出站配置. 4. 在"相关项目"下面,单击"密钥库和证书",然后单击 CellDefaultTrustStore 密钥库. 5.  在"其他属性"下面

TextView中ellipsize属性

TextView中可以设置一个ellipsize属性,作用是当文字长度超过textview宽度时的显示方式: 例如,"123456789"显示, 只是举例,以实际显示为准: android:ellipsize="start"-–省略号显示在开头 "...789"android:ellipsize="end"--省略号显示在结尾  "1234..."android:ellipsize="middle

解决SqlServer中Collate冲突的问题

使用Sql连表查询的时候会遇到Collate冲突的问题,比如: select id,Name from [dbo].VMImage union select id,Name from [dbo].[DicVMImage] 得到的Error: Msg 468, Level 16, State 9, Line 1 Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "SQL_Latin1_Ge

解决EBS中JAR包冲突的问题

同事解决的,摘抄上来备用. 问题描述:在OAF里调用ESB的服务报错如下: Error Page Exception Details. oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IllegalAccessError, msg=tried to access class org.apache.commons.log

解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题.今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题. 1.ScrollView布局中嵌套Listview显示不正常的解决方案 目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种. (1)自定义一个Listview,继承自Listview,代码如下: public class ListV

解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition 1>…\include\winsock.h(460) : see previous definition of 'AF_IPX' … 或者这个错误 #error "ws2tcpip.h is 

解决TextView多行滑动与NestedScrollView等,滑动冲突,我的解决方案

1.首先要明白,什么时候回TextView处理滑动,什么时候不处理滑动 1.1往上滑动,到达文本底部就不要再处理了,如果往上滑动不在底部则继续TextView滑动 1.2往下滑动,到达文本顶部就不要再处理了,如果往下滑动不在顶部则继续TextView滑动 关键计算地方: 1.当前是上滑动还是下滑动(相对于屏幕) ,使用ev.getRawY()获得当前滑动位置在屏幕哪个地方 2.  计算文本客滑动到哪里即可停止, (行高*总文本行数)- (行高 * 最多显示行数)   int sum = getL