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.

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.


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.


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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.