web-dev-qa-db-fra.com

Comment puis-je afficher des ellipses sur mon TextView s'il est supérieur à la ligne 1?

J'ai la mise en page suivante qui ne fonctionne pas:

<LinearLayout 
    Android:orientation="horizontal" 
    Android:layout_width="match_parent" 
    Android:id="@+id/experienceLayout" 
    Android:background="#ffffff" 
    Android:layout_height="match_parent" 
    Android:paddingLeft="6dp" 
    Android:paddingRight="6dp" 
    Android:paddingBottom="6dp" 
    Android:paddingTop="6dp">

    <TextView 
        Android:layout_weight="1" 
        Android:id="@+id/experienceLabel" 
        Android:text="Experience" 
        Android:layout_height="wrap_content" 
        Android:textColor="#000000" 
        Android:layout_width="wrap_content" 
        Android:textStyle="bold">
    </TextView>

    <TextView 
        Android:id="@+id/experienceTextView" 
        Android:text="TextView" 
        Android:layout_height="wrap_content" 
        Android:textColor="#000000" 
        Android:layout_width="wrap_content" 
        Android:ellipsize="end" 
        Android:lines="1" 
        Android:maxLines="1" 
        Android:singleLine="true" 
        Android:fadeScrollbars="false">
    </TextView>

</LinearLayout>
80
Sheehan Alam

C'est un problème commun. Essayez d'utiliser ce qui suit:

Android:scrollHorizontally="true"
Android:ellipsize="end" 
Android:maxLines="1"

.............. le scrollHorizontally est la "sauce spéciale" qui le fait fonctionner.

244
BonanzaDriver

Cela fera aussi une seule ligne avec ellipsise

 Android:singleLine="true"
28
Atul Bhardwaj

Utilisez ceci

Android:ellipsize="end"  
Android:singleLine="true"

Ne l'utilisez pas sans avoir pleinement conscience de la sortie

Android:ellipsize="end"  
Android:maxLines="1"

Lorsque vous utilisez maxlines = 1, la plupart des caractères seront tronqués.

16
Mohamed Ibrahim

La façon dont cela a fonctionné pour moi sur plusieurs périphériques/API était comme cela par programme (où tv est votre TextView):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }
11
Marilia

Toutes les réponses ci-dessus répondent donc à l'exigence selon laquelle une seule ligne, puis les Ellipsis doivent apparaître. Cependant, si vous souhaitez que les ellipses apparaissent après certaines lignes de texte, utilisez les éléments suivants:

Android:ellipsize="end"
Android:maxLines="2"
Android:singleLine="false"

Avec cela, les Ellipsis n'apparaîtront qu'après 2 lignes. Remarque: Il est important que singleLine soit défini sur false.

0
SDK4551