解决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 ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            mTextView.setText(content);
            if (mTextView.getLineCount()>maxLines){
                int lineEndIndex=mTextView.getLayout().getLineEnd(maxLines-1);//一行的结束索引
                 String text=content.subSequence(0,lineEndIndex-1)+"...";//返回一个新的字符串序列
                mTextView.setText(text);
            }else {
                removeGlobalOnLayoutListener(mTextView.getViewTreeObserver(),this);
            }
        }
    });
}
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
private void removeGlobalOnLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener){
       if (observer==null)
           return;
    if (Build.VERSION.SDK_INT<16){
        observer.removeGlobalOnLayoutListener(listener);
    }else {
        observer.removeOnGlobalLayoutListener(listener);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值