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


100

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>

Réponses:


286

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.


12
Etrange ... J'ai essayé android:scrollHorizontally="true"mais ça n'a pas marché, j'ai dû utiliser l'attribut obsolète android:singleLine="true".
Gerardo Contijoch

1
oui scrollHorizontallyest la clé réelle de...
Rishabh Dutt Sharma

scrollHorizontally? évidemment je ne veux pas d'effet de défilement horizontal.
filthy_wizard

@ user1232726: Oui, "faire défiler horizontalement". Par bon sens, jetez un œil à la date de la question et à la date des réponses ... il va sans dire que ni l'une ni l'autre ne sont actuellement pertinentes (avant de commenter).
BonanzaDriver

L'utilisation d'ellipsize avec maxLines pourrait planter l'application - Rapport d'Android Studio intellisense
Vaishnav Mhetre


25

Utilisez ceci

android:ellipsize="end"  
android:singleLine="true"

Ne l'utilisez pas sans être pleinement conscient de la sortie

android:ellipsize="end"  
android:maxLines="1"

Lorsque vous l'utilisez, maxlines = 1il tronquera un certain temps la plupart des caractères.


12

La façon dont cela fonctionnait pour moi sur plusieurs appareils / API était programmatiquement comme ceci (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);
    }

2
C'est la réponse la plus utile de toutes ... fonctionne sur chaque API et peut être facilement convertie en bibliothèque Utils.
Mariano Zorrilla du

1
Vous devriez utiliser le caractère points de suspension \u2026au lieu des trois .caractères
Chris Stillwell

Vous avez raison @ChrisStillwell et j'utilise le caractère points de suspension dans mon code. J'ai édité la réponse, merci. :)
Marilia

3

Ainsi, toutes les réponses ci-dessus répondent à l'exigence selon laquelle une seule ligne, puis les points de suspension doivent apparaître. Cependant, si vous souhaitez que les points de suspension apparaissent après certaines lignes de texte, vous devez utiliser ce qui suit:

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

Avec cela, les points de suspension n'apparaîtront qu'après 2 lignes. Remarque: il est important que singleLine soit false.


La valeur par défaut est false selon la documentation: developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLineest obsolète. Dans mon cas, j'ai dû obtenir une hauteur fixe pour le TextViewet j'ai utilisé l' android:linesattribut à la place de android:maxLines. J'ai pensé que cela pourrait aider quelqu'un ayant le même problème que le mien.

android:ellipsize="end"
android:lines="2"

Pas vrai. La documentation ne dit rien sur la dépréciation: developer.android.com/reference/android/widget/…
cesards

@cesards Intéressant. Ce document dit que c'est - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.