在项目需求中,需要在文本超出本行后截取超出的内容和其他信息组合起来,这样的需求,单单设置文本的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 + "这里是超出部分的截取显示");
}
}
});
剩下的就是根据你自己的需求进行截取了,祝君好运!新年快乐~!