我想做什么
我正在尝试使用
的TextViewandroid:ellipsize="end"
android:maxLines="3"
而不是“......”最后有一个“......显示更多”。
我在哪里
如果TextView是单行,这很容易,因为我可以使用2个TextViews,但我需要它有多行,“Show More”需要内联。
我一直在寻找一种方法来更改最后添加但未找到任何内容的省略号字符。
我能想到的唯一解决方案是放弃自动省略号,测量文本并从代码中添加“...显示更多”。
问题
有没有办法用自定义的内容替换Android添加的内容(“...”)?
答案 0 :(得分:6)
试试这种方式
创建此功能
public void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText) {
if (tv.getTag() == null) {
tv.setTag(tv.getText());
}
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if (maxLine <= 0) {
int lineEndIndex = tv.getLayout().getLineEnd(0);
String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
} else if (tv.getLineCount() >= maxLine) {
int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
}
}
});
}
如何使用
这将在第4行末尾写下“SeeMore”而不是“......”
makeTextViewResizable(tv, 4, "SeeMore");
现在不需要在xml中编写这些行
android:ellipsize="end"
android:maxLines="3"