android textview ellipsis

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:

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 = "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" />

Imagen de TextView


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"