Android, ¿Cómo limitar el ancho de TextView(y agregar tres puntos al final del texto)?
ellipsis (18)
Tengo un TextView
que quiero limitar los caracteres de la misma. En realidad, puedo hacer esto, pero lo que estoy buscando es cómo agregar tres puntos (...) al final de la cadena. Éste muestra que el texto ha continuado. Este es mi XML pero no hay puntos aunque limita mi texto.
<TextView
android:id = "@+id/tvFixture"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_toLeftOf = "@id/ivFixture_Guest"
android:text = "@string/test_06"
android:lines = "1"
android:ems = "3"
android:gravity = "right"
style = "@style/simpletopic.black"
android:ellipsize="end"/>
Agrega estas dos líneas en tu texto
android:ellipsize="end"
android:singleLine="true"
Creo que le das la altura y el ancho fijo de la vista de texto. Entonces su solución funcionará.
El enfoque de @AzharShaikh funciona bien.
android:ellipsize="end"
android:maxLines="1"
Pero me doy cuenta de un problema que TextView se truncará por palabra (por defecto). Mostrar si tenemos un texto como:
prueba long_line_without_any_space_abcdefgh
El TextView mostrará:
prueba...
Y encontré una solución para manejar este problema, reemplazar espacios con el carácter de espacio sin interrupción Unicode, hace que TextView se ajuste a los caracteres en lugar de a las palabras:
yourString.replace(" ", "/u00A0");
El resultado:
prueba long_line_without_any_space_abc ...
Estoy usando Horizonal Recyclerview.
1) Aquí en CardView, TextView se distorsiona verticalmente cuando se usa
android:ellipsize="end"
android:maxLines="1"
Compruebe el audaz TextViews Wyman Group, Jaskolski ...
2) Pero cuando utilicé singleLine junto con ellipsize -
android:ellipsize="end"
android:singleLine="true"
Compruebe el audaz TextViews Wyman Group, Jaskolski ...
La segunda solución funcionó correctamente para mí (usando singleLine). También lo he probado en la versión del sistema operativo: 4.1 y superior (hasta 8.0), está funcionando bien sin ningún fallo.
Lo siguiente es lo que aprendí jugando con varias opciones para forzar un TextView
a una sola línea (con y sin los tres puntos).
Android: maxLines = "1"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="one two three four five six seven eight nine ten" />
Esto solo fuerza el texto a una línea. Cualquier texto extra está oculto.
Relacionado:
- android:maxLines
- android:singleLine (nota this y this )
- android:lines
ellipsize = "end"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:text="one two three four five six seven eight nine ten" />
Esto corta el texto que no encaja, pero permite a los usuarios saber que el texto se ha truncado agregando puntos suspensivos (los tres puntos).
Relacionado:
- ellipsize = "start" (... aaabbbccc)
- ellipsize = "middle" (aaa ... ccc)
- Android: elipsis, significado de las opciones
ellipsize = "marquesina"
<TextView
android:id="@+id/MarqueeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="one two three four five six seven eight nine ten" />
Esto hace que el texto se desplace automáticamente a través de TextView. Tenga en cuenta que a sometimes se debe establecer en el código:
textView.setSelected(true);
Supuestamente android:maxLines="1"
y android:singleLine="true"
deberían hacer básicamente lo mismo y, dado que singleLine está this , preferiría no usarlo, pero cuando lo saco, el marco no se desplaza más. . Sin maxLines
eliminar maxLines
no lo afecta.
Relacionado:
HorizontalScrollView con scrollHorizontally
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/horizontalScrollView">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:scrollHorizontally="true"
android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>
Esto permite al usuario desplazarse manualmente para ver toda la línea de texto.
Necesita agregar las siguientes líneas en su diseño para la vista de texto
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"
Espero que esto funcione para usted.
Obtuve el resultado deseado usando
android:maxLines="2"
android:minLines="2"
android:ellipsize="end"
El truco consiste en establecer maxLines y minLines en el mismo valor ... y No solo android: lines = "2", tampoco se puede hacer el truco. También estás evitando cualquier atributo desaprobado.
Para trabajar con el atributo android: ellipsize , debe limitar el ancho del diseño de TextView , de modo que el texto esté fuera de los límites de la vista de TextView.
Por lo tanto, el atributo android: layout_width juega un papel clave aquí, configúralo en consecuencia.
Un ejemplo puede ser:
<TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="This is a very long text to be displayed"
android:textSize="12sp"
android:maxLines="1"
/>
Ahora, aquí si el texto en android: text = "Este es un texto muy largo para mostrar" sale de la vista de TextView con un android: layout_width = "120dp" , android: ellipsize = "end" truncará el texto y lugar ... (3 puntos) después de él. Es decir, esto es muy largo ... se mostrará en el TextView.
Prueba esta propiedad de TextView en tu archivo de diseño ...
android:ellipsize="end"
android:maxLines="1"
Puede limitar el número de caracteres de su vista de texto y agregar (...) después del texto. Supongamos que necesita mostrar solo 5 letras y, posteriormente, debe mostrar (...), simplemente haga lo siguiente:
String YourString = "abcdefghijk";
if(YourString.length()>5){
YourString = YourString.substring(0,4)+"...";
your_text_view.setText(YourString);
}else{
your_text_view.setText(YourString); //Dont do any change
}
un pequeño truco ^ _ ^. Aunque no es una buena solución. Pero un trabajo alrededor del cual me funcionó: D
EDITAR: he añadido el control de menos carácter según su número limitado. de personajes.
Puedes escribir esta línea en xml donde tomas la vista de textview
:
android:singleLine="true"
Supongo que desea limitar el ancho a una línea y no limitarlo por carácter. Dado que singleLine
está en desuso, puede intentar usar lo siguiente juntos:
android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
Tu solo cambias
android: layout_width = "wrap_content"
usa esto debajo de la línea
android: layout_width = "match_parent"
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/visitBox"
android:orientation="vertical" >
<TextView
android:id="@+id/txvrequestTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Abcdefghighiklmnon"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/orange_color" />
</LinearLayout>
Utilizar
-
android:singleLine="true"
-
android:maxLines="1"
-
app:layout_constrainedWidth="true"
Así es como se ve mi TextView
completo:
<TextView
android:id="@+id/message_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:maxLines="1"
android:singleLine="true"
android:text="NAME PLACEHOLDER MORE Text"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constrainedWidth="true"
app:layout_constraintEnd_toStartOf="@id/message_check_sign"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/img_chat_contact"
app:layout_constraintTop_toTopOf="@id/img_chat_contact" />
código:
TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);
xml:
android:maxLines = "5"
p.ej
En Mateo 13, los discípulos le preguntaron a Jesús por qué hablaba a las multitudes en parábolas. Él respondió: "Se te ha dado saber los misterios del reino de los cielos, pero a ellos no se les ha dado.
Salida: En Mateo 13, los discípulos le preguntaron a Jesús por qué hablaba a las multitudes en parábolas. Él respondió: "Se te ha dado saber ...
p.ej. puedes usar
android:maxLength="13"
esto restringirá la longitud de la vista de texto a 13, pero el problema es que si intenta agregar 3 puntos (...), no se mostrará, ya que formará parte de la longitud de la vista de texto.
String userName;
if (data.length() >= 13) {
userName = data.substring(0, 13)+ "...";
} else {
userName = data;
}
textView.setText(userName);
aparte de esto tienes que usar
android:maxLines="1"
puedes hacerlo por xml
:
<TextView
android:id="@+id/textview"
android:maxLines="1" // or any number of lines you want
android:ellipsize="end"
/>
Obsoleto:
Agrega una propiedad más de android:singleLine="true"
en tu Textview
Actualizado:
android:ellipsize="end"
android:maxLines="1"