What I am trying to do
I am trying to have a TextView with
android:ellipsize="end"
android:maxLines="3"
that instead of the "..." has a "... Show More" at the end.
Where I am
If the TextView would be single line this would be easy as I could use 2 TextViews, but I need it to have multiple lines and the "Show More" needs to be inline.
I have been searching for a way to change the ellipsis character that is added at the end but could not find anything.
The only solution I can think of is giving up on the automatic ellipsis, measure text and add the "... Show More" from code.
The question
Is there a way to replace what Android adds at the end (the "...") with something custom?
Try this way
create this function
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);
}
}
});
}
how to use
This will write "SeeMore" instead "..." at the end of 4th line
makeTextViewResizable(tv, 4, "SeeMore");
Now not need to write these lines in xml
android:ellipsize="end"
android:maxLines="3"
来源:https://stackoverflow.com/questions/18738050/textview-add-text-after-ellipsis-or-change-ellipsis-character