问题
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?
回答1:
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