Como posso mostrar elipses no meu TextView se for maior que 1 linha?

100

Tenho o seguinte layout que não funciona:

<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>
Sheehan Alam
fonte

Respostas:

286

Esse é um problema comum. Tente usar o seguinte:

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

.............. o scrollHorizontally é o "molho especial" que o faz funcionar.

BonanzaDriver
fonte
12
Estranho ... Tentei android:scrollHorizontally="true"mas não funcionou, tive que usar o atributo obsoleto android:singleLine="true".
Gerardo Contijoch
1
sim scrollHorizontallyé a chave real para...
Rishabh Dutt Sharma
scrollHorizontally? obviamente, não quero um efeito de rolagem horizontal.
filthy_wizard
@ user1232726: Sim, "rolar horizontalmente." Por uma questão de bom senso, dê uma olhada na data da pergunta e na data das respostas ... nem é preciso dizer que nenhuma delas pode ser relevante no momento (antes de comentar).
BonanzaDriver
Usar ellipsize com maxLines pode travar o aplicativo - Relatório do Android Studio intellisense
Vaishnav Mhetre
34

Isso também fará uma única linha com reticências

 android:singleLine="true"
Atul Bhardwaj
fonte
15
Aparentemente, o uso foi suspenso
Oliver Pearmain
1
É melhor este quebrar palavras longas.
bpiec
android: maxLines = "1"
Jaydev,
1
@grebulon Está obsoleto. Pelo menos agora.
Spikatrix de
25

Usa isto

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

Não use isso sem estar totalmente ciente de qual resultado vem

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

Quando você o usa maxlines = 1, algum tempo truncará a maioria dos caracteres.

Mohamed Ibrahim
fonte
12

A maneira como funcionou para mim em vários dispositivos / APIs foi programaticamente assim (onde tv é o seu TextView):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }
Marilia
fonte
2
Esta é a resposta mais útil de todas ... funciona em todas as APIs e pode ser facilmente convertida em uma biblioteca de utilitários.
Mariano Zorrilla
1
Você deve usar o caractere de reticências em \u2026vez dos três .caracteres
Chris Stillwell,
Você está certo @ChrisStillwell e eu uso o caractere de reticências no meu código. Eu editei a resposta, obrigado. :)
Marília
3

Portanto, todas as respostas acima atendem ao requisito de que apenas 1 linha e as reticências apareçam. No entanto, se desejar que as reticências apareçam após certas linhas de texto, você deve usar o seguinte:

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

Com isso, as reticências aparecerão somente após 2 linhas. Nota: É importante ter singleLine como falso.

SDK4551
fonte
O valor padrão é falso de acordo com a documentação: developer.android.com/reference/android/widget/…
Pierre
-1

android:singleLineestá obsoleto. No meu caso, tive que obter uma altura fixa para o TextViewe usei o android:linesatributo em vez de android:maxLines. Achei que isso pudesse ajudar alguém com o mesmo problema que o meu.

android:ellipsize="end"
android:lines="2"
Reaz Murshed
fonte
Não é verdade. A documentação não diz nada sobre a
suspensão de
@cesards Interesting. Este documento diz que é - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed