How to set maxLines and ellipsize of a TextView at the same time

Android

Android 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmichaelView Question on Stackoverflow
Solution 1 - AndroidImeshkeView Answer on Stackoverflow
Solution 2 - AndroidMax M.View Answer on Stackoverflow
Solution 3 - AndroidSeptimusX75View Answer on Stackoverflow
Solution 4 - AndroidJohn Alexander BettsView Answer on Stackoverflow
Solution 5 - AndroidLopeView Answer on Stackoverflow
Solution 6 - AndroidBilal AmeerView Answer on Stackoverflow
Solution 7 - Androiddavid72View Answer on Stackoverflow