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?
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
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
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" />
.
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)
}