¿Puedo limitar el número de caracteres de TextView?

3 minutos de lectura

Lo que tengo ahora es un ListView de elementos TextView. cada elemento TextView muestra un texto (la longitud del texto varía de 12 palabras a más de 100). Lo que quiero es hacer que estos TextViews muestren una parte del texto (digamos 20 palabras o aproximadamente 170 caracteres).

¿Cómo limitar TextView a un número fijo de caracteres?

avatar de usuario
Moco

Aquí hay un ejemplo. Limito el tamaño con el atributo maxLength, lo limito a una sola línea con el atributo maxLines, luego uso ellipsize=end para agregar un “…” automáticamente al final de cualquier línea que haya sido cortada.

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

  • “luego use ellipsize=marquee para agregar un “…” automáticamente al final de cualquier línea”

    – Moco

    5 de febrero de 2012 a las 14:27

  • Suena prometedor. Lo probaré.

    – iTurki

    5 de febrero de 2012 a las 14:31

  • @Booger android:ellipsize=”marquee” no agrega puntos suspensivos (…) al final, sino que cubre el final del texto cortado como una señal de límite. android:ellipsize=”end” agregará puntos suspensivos (…) al final, mientras que android:ellipsize=”start” agregará puntos suspensivos al principio

    – ajdeguzman

    26 de febrero de 2014 a las 5:58

  • @ajdeguzman, ¿qué debo hacer si quiero el texto restante en la segunda línea? Hice maxLines = 2 y no incluí el parámetro ellipsize. Sé que también hay algo conocido como em, pero no obtuve una explicación clara de cómo funciona.

    –Sagar Devanga

    19 de agosto de 2015 a las 8:01

  • Creo que layout_width tiene una relación para activar la propiedad ellipsize. Ejemplo bien explicado, por favor siga el enlace

    – taranjeetsapra

    5 de mayo de 2020 a las 6:47


avatar de usuario
darko petkovski

Si no está interesado en las soluciones xml, tal vez pueda hacer esto:

String s="Hello world";
Textview someTextView;
someTextView.setText(getSafeSubstring(s, 5));
//the text of someTextView will be Hello

public String getSafeSubstring(String s, int maxLength){
  if(!TextUtils.isEmpty(s)){
    if(s.length() >= maxLength){
      return s.substring(0, maxLength);
    }
  }
  return s;
}

Use el siguiente código en TextView

 android:maxLength="65"

Disfrutar…

Hice esto usando el maxEms atributo.

 <TextView
    android:ellipsize="end"
    android:maxEms="10"/>

Puede usar el método setEllipsize de la clase TextView
http://developer.android.com/reference/android/widget/TextView.html#setEllipsize(android.text.TextUtils.TruncateAt)

Con las constantes de la clase TextUtil para agregar los puntos de suspensión
http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html

avatar de usuario
taranjeetsapra

Estoy compartiendo un ejemplo en el que configuré maxLength=1, es decir, lo limité a una sola línea con el atributo maxLines, luego uso ellipsize=end para agregar un “…” automáticamente al final de cualquier línea que haya sido cortada .

Tenga en cuenta: layout_width que es 120dp, es decir, después de 120dp cualquier texto
exceder activará la propiedad “elipsize=end”

pegue el siguiente código directamente para verificar.

<TextView
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:maxLines="1"
    android:maxLength="40"
    android:text="Can I limit TextView's number of characters?"
    android:textColor="@color/black"
    android:textSize="12sp"
    android:textStyle="bold" />

.

avatar de usuario
Blundell

Kotlin programático.

Cortar el inicio del texto:

 val maxChars = 10000
 if (helloWorldTextView.text.length > maxChars) {
      helloWorldTextView.text = helloWorldTextView.text.takeLast(maxChars)
 }

Cortar el final del texto:

 val maxChars = 10000
 if (helloWorldTextView.text.length > maxChars) {
      helloWorldTextView.text = helloWorldTextView.text.take(maxChars)
 }

¿Ha sido útil esta solución?