Android: o TextView trunca e substitui automaticamente os últimos 3 caracteres de String

131

Se a Stringfor maior que a TextViewlargura, ele será automaticamente agrupado na próxima linha. Eu posso evitar isso usando android:singleLine(obsoleto) ou configurando android:inputType="text". O que eu preciso agora é algo que substitua os três últimos caracteres meus Stringpor " ... ". Como não estou usando uma fonte monoespaçada, isso sempre será diferente, dependendo das letras usadas na minha String. Então, eu estou querendo saber qual é a melhor maneira de obter os últimos 3 caracteres de uma String em um TextViewe substituí-los. Talvez já exista algo implementado na estrutura do Android, pois esse deve ser um problema comum.

znq
fonte

Respostas:

290

Você deve poder usar a propriedade "elipsize" de uma exibição de texto:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

Também pode ser necessário aplicar valores de gravidade ao layout; Às vezes, tenho visto visualizações de "alongamento automático" sem elas.

Nate
fonte
Perfeito. Obrigado. Eu tentei isso antes, mas não funcionou, porque usei android: inputType = "text" em vez de android: singleLine = "true" (que deveria estar obsoleto). Mas agora eu vou ficar com o android: singleLine = "true". Muchas gracias.
Znq 03/11/2009
44
Ainda não adiciona o "...". Para mim, esta pergunta não está totalmente respondida! Esta resposta fará com que "short verylongword" seja apenas "short" e não "shortlon" ... Além disso, vocês sugerem o uso de um atributo obsoleto.
OneWorld
7
Funciona muito bem, no entanto, o singleLine foi descontinuado, portanto, você deve usar maxLines = "1". Nota lateral, elipsize funciona com várias linhas também!
Torre Lasley
4
singleLine foi descontinuado. Use maxLines = "1". apenas um comentário a velha resposta
Ewoks
1
MaxLine = 1 truncará a visualização de texto no meio. SingleLine = True funciona conforme o esperado.
Cobra
33

Encontrei uma solução interessante para esse problema.

maxLines=1
ellipsize=end
scrollHorizontally=true

O truque é a última afirmação sobre rolagem horizontal ... confira. Pelo menos funciona na v2.2.

BonanzaDriver
fonte
Interessante ... bom saber. Obrigado Marco pelo aviso.
BonanzaDriver
4

Programaticamente, você pode usar:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
xevser
fonte