美文网首页
Android 中TextView省略号代替超出内容,且获取被省

Android 中TextView省略号代替超出内容,且获取被省

作者: 大川的川 | 来源:发表于2021-02-18 11:58 被阅读0次
    在项目需求中,需要在文本超出本行后截取超出的内容和其他信息组合起来,这样的需求,单单设置文本的android:ellipsize="end"属性值是不够的,我们还需要知道文本中被省略的内容,这就需要我们另辟蹊径了!
    • 主要的获取方法是textview的getEllipsisCount函数:获取被省略的字符数,0表示没有省略
      int ellipsisCount = textView.getLayout().getEllipsisCount(textView.getLineCount() - 1);
    • 如果直接在onCreate方法中调用textView.getLayout()可能返回为空。可以待textView绘制完成之后再调用。
    <!--XML布局中的textView-->
    <TextView
           android:id="@+id/textView"
           android:layout_width="match_parent"
           android:layout_height="0dp"
           android:layout_weight="1"
           android:ellipsize="end"
           android:gravity="center_vertical"
           android:maxLines="1"
           android:textColor="@color/color_222222"
           android:textSize="@dimen/sp_16" />
    
    /**Activity中的实现逻辑**/
    String strName =  "你所要获取的内容字符串";
    textView.setText(strName);
    textView.post(new Runnable() {
       @Override
       public void run() {
           // (此处注掉是因为Android版本6.0以下获取总是返回1)获取被省略的字符数,0表示没有省略 
           // int ellipsisCount = textView.getLayout().getEllipsisCount(textView.getLineCount() - 1);
           // 从第几个字符开始省略的
           int ellipsisStart = tvBookName.getLayout().getEllipsisStart(textView.getLineCount() - 1);
           if (ellipsisStart > 0
                                && strName.length() - ellipsisStart > 0
                                && !StringUtils.isEmpty(strName)) {
              String substring = strName.substring(0, ellipsisStart );
              textView.setText(substring);
              // 将原文中的超出部分截取出来,在textview2中显示
              String substring2 = strName.replace(substring, "");
              textView2.setText(substring2 + "这里是超出部分的截取显示");
           }
       }
    });
    

    剩下的就是根据你自己的需求进行截取了,祝君好运!新年快乐~!

    相关文章

      网友评论

          本文标题:Android 中TextView省略号代替超出内容,且获取被省

          本文链接:https://www.haomeiwen.com/subject/vdvgxltx.html