android 决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);
        }
    }

 

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

 

这个其实很简单,只是判断文档数是否大于3行,如果大于,则只显示3行的文本,然后加入省略号。

 

android 决TextView中MaxLines与ellipsize=end冲突问题就讲完了。

 

就这么简单。

 

 

 

 

 

 

 

 

人已赞赏
Android文章

Android开发项目中关于Retrofit2.0+RxJava+OkHttp的封装和使用

2020-3-14 17:06:08

Android文章

ndroid contentDescription的使用

2020-3-14 17:37:44

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索