Preciso elipsizar uma visualização de texto com várias linhas. Meu componente é grande o suficiente para exibir pelo menos 4 linhas com a elipse, mas apenas 2 linhas são exibidas. Tentei alterar o número mínimo e máximo de linhas do componente, mas isso não muda nada.
163
Respostas:
Aqui está uma solução para o problema. É uma subclasse do TextView que realmente funciona para elipsizar. O código android-textview-multiline-ellipse listado em uma resposta anterior que eu achei buggy em certas circunstâncias, além de estar sob a GPL, que realmente não funciona para a maioria de nós. Sinta-se livre para usar esse código livremente e sem atribuição, ou sob a licença Apache, se você preferir. Observe que há um ouvinte para notificá-lo quando o texto se torna reticulado, o que eu achei bastante útil.
fonte
No meu aplicativo, tive um problema semelhante: duas linhas de string e, eventualmente, adicione "..." se a string fosse muito longa. Eu usei esse código no arquivo xml na tag textview:
fonte
setText(..., TextView.BufferType.SPANNABLE);
.Também encontrei esse problema. Existe um bug antigo que permanece sem resposta: Bug 2254
fonte
Tente isso, funciona para mim, tenho 4 linhas e adiciona o "..." ao final da última / quarta linha. É o mesmo que a resposta da moral, mas eu tenho singeLine = "false" lá.
fonte
Consegui esse problema e, finalmente, desenvolvi uma solução curta. Você só precisa elipsize manualmente a linha desejada, seu atributo maxLine cortará seu texto.
Este exemplo recorta seu texto por no máximo 3 linhas
fonte
Combinei as soluções de Micah Hainline, Alex Băluț e Paul Imhoff para criar uma multilinha elipsizante
TextView
que também suportaSpanned
texto.Você só precisa definir
android:ellipsize
eandroid:maxLines
.Fonte completa: EllipsizingTextView.java
fonte
No meu caso, não há necessidade de codificar isso em Java. Tudo funciona como esperado. Não há necessidade de algo parecido
android:singleLine="false"
.Mas parece haver um bug na visualização de layout do Android Studio (v3.0):
Dado o Android 7.1.1 no meu dispositivo, isso está funcionando:
fonte
Com base nas soluções de Micah Hainline e dos comentários de alebs, vim com a seguinte abordagem que trabalha com textos em escala, de modo que, por exemplo,
myTextView.setText(Html.fromHtml("<b>Testheader</b> - Testcontent"));
funciona! Observe que isso funciona apenasSpanned
no momento. Talvez pudesse ser modificado para trabalhar comString
e deSpanned
qualquer maneira.fonte
Para aqueles que estão interessados, aqui está uma porta C # Xamarin.Android da adorável solução de Micah:
fonte
Para adicionar
...
no final da segunda linha, salvando 1 linha se o texto for curto:fonte
Basta adicionar código à sua atividade
isso adicionará reticências no final da visualização de texto
fonte
Estenda o TextView e substitua estes métodos:
fonte
Esta é a minha solução. você pode baixar a demo no meu github. https://github.com/krossford/KrossLib/tree/master/android-project
Esta captura de tela foi uma demonstração que
maxLines = 4
, acho que funciona bem.fonte
Eu tive o mesmo problema. Corrigi-o apenas excluindo android: ellipsize = "marquee"
fonte
Código funcionou muito bem! Você pode sobrecarregar o método onSizeChanged, caso não seja necessário alterar apenas o texto.
fonte
Este também lidou com meu html,
Origem original LINK
fonte
A resposta principal aqui do Micah Hainline funciona muito bem, mas ainda melhor é a biblioteca que foi criada a partir dele pelo usuário aleb, conforme ele postou nos comentários em Micahs answer:
Existem mais alguns recursos, se você precisar apenas do TextView, ele está aqui .
Talvez isso ajude outras pessoas a encontrá-lo mais rápido do que eu :-)
fonte
É tarde, mas eu encontrei uma classe licenciada Apache do Android, usada no aplicativo de email padrão: https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/184ec73/src/com/android/ mail / ui / EllipsizedMultilineTextView.java
fonte
Existem alguns atributos que você deve verificar: android: lines, android: minLines, android: maxLines. Para exibir no máximo 4 linhas e reticê-lo, você só precisa de android: maxLines e android: ellipsize:
fonte
Você precisa incluir isso em sua visualização de texto:
por padrão, é verdadeiro. Você precisa defini-lo explicitamente.
fonte
code <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxLines="4" android:ellipsize="marquee" android:singleLine="false" android:text="Hai make this a very long string that wraps at least 4 lines!" />