How to set maxLines and ellipsize of a TextView at the same time
AndroidAndroid Problem Overview
I want to limit my text view to have maximum of 5 lines, so I did:
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxLines="5" />
But when I try to configure it to add '...' when the text is truncated, I add android:ellipsize="end". I do see the ... but then my TextView only has a max line of 2, instead of 5.
Can you please suggest how can I make the text view of maximum line of 5 and add '...' when it get truncated?
Thank you.
Android Solutions
Solution 1 - Android
Progrmatically, you can use:
your_text_view.setEllipsize(TextUtils.TruncateAt.END);
your_text_view.setMaxLines(4);
your_text_view.setText("text");
Solution 2 - Android
try this code...
final TextView tv_yourtext = (TextView)findViewById(R.id.text);
tv_yourtext.setText("A really long text");
ViewTreeObserver vto = tv_yourtext.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = tv_yourtext.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if(tv_yourtext.getLineCount() > 6){
Log.d("","Line["+tv_yourtext.getLineCount()+"]"+tv_yourtext.getText());
int lineEndIndex = tv_yourtext.getLayout().getLineEnd(5);
String text = tv_yourtext.getText().subSequence(0, lineEndIndex-3)+"...";
tv_yourtext.setText(text);
Log.d("","NewText:"+text);
}
}
});
Solution 3 - Android
Apparently you have to specify the inputType
and set it to none
in this case.
It should look something like this:
<TextView
android:ellipsize="end"
android:inputType="none"
android:maxLines="2"
Solution 4 - Android
You only need to add this line to your TextView:
android:ellipsize="marquee"
Solution 5 - Android
There is same question https://stackoverflow.com/questions/2160619/android-ellipsize-multiline-textview This is known bug, quite old and not fixed yet :(
someone posted workaround http://code.google.com/p/android-textview-multiline-ellipse/ maybe it will help you (or someone else)
Solution 6 - Android
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="5"
android:ellipsize="end" />
Works for me, make sure TextView top container should have height like
android:layout_height="wrap_content"
Solution 7 - Android
When I set the TextView height to a constant value (like 50dp), it works fine for me.