Come posso mostrare i puntini di sospensione sul mio TextView se è maggiore della riga 1?


100

Ho il seguente layout che non funziona:

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

Risposte:


286

Questo è un problema comune. Prova a utilizzare quanto segue:

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

.............. la pergamena in orizzontale è la "salsa speciale" che la fa funzionare.


12
Strano ... ho provato android:scrollHorizontally="true"ma non ha funzionato, ho dovuto usare l'attributo deprecato android:singleLine="true".
Gerardo Contijoch

1
scrollHorizontallyè la vera chiave per...
Rishabh Dutt Sharma

scorrere orizzontalmente? ovviamente non voglio un effetto di scorrimento orizzontale.
filthy_wizard

@ user1232726: Sì, "scorri orizzontalmente". Per una questione di buon senso, dai un'occhiata alla data della domanda e alla data delle risposte ... è ovvio che nessuna delle due potrebbe essere attualmente pertinente (prima di commentare).
BonanzaDriver

L'utilizzo di ellipsize con maxLines potrebbe causare l'arresto anomalo dell'app - Rapporto da Android Studio intellisense
Vaishnav Mhetre


25

Usa questo

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

Non utilizzarlo senza essere pienamente consapevoli di quale output viene fornito

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

Quando lo usi maxlines = 1, qualche volta troncerà la maggior parte dei caratteri.


12

Il modo in cui ha funzionato per me su più dispositivi / API era programmaticamente come questo (dove tv è il tuo TextView):

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

2
Questa è la risposta più utile di tutte ... funziona su ogni singola API e può essere facilmente convertita come libreria Utils.
Mariano Zorrilla

1
Dovresti usare i puntini di sospensione \u2026invece dei tre .caratteri
Chris Stillwell,

Hai ragione @ChrisStillwell e io uso il carattere di ellissi nel mio codice. Ho modificato la risposta, grazie. :)
Marilia

3

Quindi tutte le risposte sopra soddisfano il requisito che dovrebbe apparire solo 1 riga e poi i puntini di sospensione. Tuttavia, se desideri che i puntini di sospensione vengano visualizzati dopo determinate righe di testo, devi utilizzare quanto segue:

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

Con questo i puntini di sospensione appariranno solo dopo 2 righe. Nota: è importante che singleLine sia false.


Il valore predefinito è false secondo la documentazione: developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLineè deprecato. Nel mio caso, ho dovuto ottenere un'altezza fissa per TextViewe ho usato l' android:linesattributo invece di android:maxLines. Ho pensato che questo potrebbe aiutare qualcuno che ha lo stesso problema del mio.

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

Non vero. La documentazione non dice nulla sulla deprecazione: developer.android.com/reference/android/widget/…
cesards

@cesards interessante. Questo documento dice che è - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.