Android: TextView trunca automáticamente y reemplaza los últimos 3 caracteres de String

131

Si a Stringes más largo que el TextViewancho de 's, se ajusta automáticamente a la siguiente línea. Puedo evitar esto usando android:singleLine(en desuso) o configurando android:inputType="text". Lo que necesito ahora es algo que reemplace los últimos 3 caracteres de mi Stringcon " ... ". Como no estoy usando una fuente monoespaciada, esto siempre será diferente dependiendo de las letras utilizadas en mi String. Así que me pregunto cuál es la mejor manera de obtener los últimos 3 caracteres de una Cadena en ay TextViewreemplazarlos. Tal vez ya haya algo implementado en el marco de Android, ya que esto debe ser un problema común.

znq
fuente

Respuestas:

290

Debería poder utilizar la propiedad "elipsis" de una vista de texto:

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

También es posible que deba aplicar valores de gravedad al diseño también; A veces he visto vistas de "auto-estiramiento" sin ellas.

Nate
fuente
Perfecto. Gracias. He intentado eso antes, pero no funcionó, porque usé android: inputType = "text" en lugar de android: singleLine = "true" (que se supone que está en desuso). Pero ahora me quedaré con android: singleLine = "true". Muchas gracias.
znq
44
Todavía no agrega el "...". ¡Para mí, esta pregunta no está totalmente respondida! Esta respuesta hará que "palabra muy corta" sea solo "corta" y no "muy corta ..." Además de eso, ustedes sugieren usar un atributo obsoleto.
OneWorld
77
Funciona muy bien, sin embargo, singleLine está en desuso, por lo que debe usar maxLines = "1" en su lugar. Nota al margen, el elipsis también funciona con varias líneas.
Torre Lasley
44
singleLine está en desuso. Use maxLines = "1". Sólo un comentario a la respuesta de edad
Ewoks
1
MaxLine = 1 truncará la vista de texto en el medio. SingleLine = True funciona como se esperaba.
Serpiente
33

Encontré una interesante ronda para este problema.

maxLines=1
ellipsize=end
scrollHorizontally=true

El truco es esa última declaración sobre desplazamiento horizontal ... échale un vistazo. Al menos funciona en v2.2.

BonanzaDriver
fuente
Interesante ... bueno saberlo. Gracias Marco por el aviso.
BonanzaDriver
4

Programáticamente, puedes 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
fuente