Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


TextView android: ellipsize = "marquee" no funciona como se esperaba

Tengo algunos elementos personalizados en un ListView y cada elemento es, hasta saber, sólo un TextView en un LinearLayout. Quisiera que el texto dentro del TextView sea una sola línea que rueda horizontalmente cuando el texto es demasiado largo. He leído muchos posts sobre esto y me llegó con una solución que se suponía que funcionaba, pero en lugar de tener el desplazamiento de texto completo tengo el texto cortado a la longitud de la vista que contiene y terminó con los tres puntos. No quiero los tres puntos, pero todo el texto tiene que ser desplazado.

Este es el diseño de los elementos de la lista (list_item.xml)

  • Android: ¿Cómo evito iniciar una actividad que ya está en la pila?
  • Snackbar en la biblioteca de soporte no incluye OnDismissListener ()?
  • Opciones de SyncAdapter
  • dimen.xml o dimens.xml?
  • Mostrar el botón de arriba / atrás en android anidado PreferenceScreen?
  • La opción Android withText no funciona para los botones de barra de acción de Huawei MediaPad (T1-A21L)
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listItem" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/list_item_selector" android:orientation="horizontal" android:paddingBottom="7dp" android:paddingLeft="15dp" android:paddingTop="7dp" > <TextView android:id="@+id/listText" style="@style/Text_View_Style_White" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:padding="3dp" android:selectAllOnFocus="true" android:singleLine="true" android:textColor="@drawable/list_item_text_selector" /> </LinearLayout> 

    También he intentado con android:focusable="true" , android:scrollHorizontally="true" y android:maxLines="1" atributos, pero ninguno de ellos está funcionando. En el método getView() del adaptador (que extiende un BaseAdapter) utilizo el setSelected(true) en TextView, antes de devolver la vista.

    No puedo averiguar cuál es el problema. Cualquier ayuda será muy apreciada.

  • FragmentManager popBackStack no quita el fragmento
  • ¿Debe cada actividad tener un diseño?
  • La posición 0 no se selecciona en Spinner en Android
  • ¿Cómo puede saber si una vista es visible en la pantalla en Android?
  • ¿Ejecutar comandos de Shell a través de código java en Android?
  • Uso del contexto de la aplicación en todas partes?
  • 5 Solutions collect form web for “TextView android: ellipsize = "marquee" no funciona como se esperaba”

    Tuve el mismo problema hoy y fue capaz de averiguarlo. Ninguna de las soluciones listadas aquí trabajó así que pensé que compartiría lo que lo arregló para mí.

    TL; DR: Si está configurando dinámicamente el texto de TextView, pruebe a establecer las propiedades de "marca" necesarias en el código en lugar de en el archivo xml de diseño.

    Versión más larga: En mi caso, tenía un GridView con un adaptador y un TextView en cada elemento. Algunos de los artículos tenían texto que era demasiado largo para caber en su "celda" de la cuadrícula, y por lo tanto quería todos los elementos que eran demasiado largos para desplazarse unas cuantas veces. Siendo que el TextView está en un GridView con un adaptador, el texto estaba obviamente en código, desde el elemento actual del adaptador.

    A través de la depuración mucho doloroso, finalmente tuve la idea de establecer todas las configuraciones de marquesina en código en lugar de en el archivo xml de diseño. Esto hizo que los 3 puntos (…) finalmente se alejaran del TextView y empezarían a desplazarse en su lugar.

    Esto es lo que mi archivo de diseño se ve ahora: (tenga en cuenta que ninguna de las propiedades enumeradas anteriormente se establecen aquí)

     <TextView android:text="Placeholder" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" android:id="@+id/name" /> 

    Y aquí está el aspecto de mi código de adaptador:

     nameView.setText(name); nameView.setEllipsize(TextUtils.TruncateAt.MARQUEE); nameView.setSingleLine(true); nameView.setMarqueeRepeatLimit(5); nameView.setSelected(true); 

    Key está aquí para hacer setSelected(true); En la vista de texto .. Por supuesto

     android:ellipsize="marquee" android:scrollHorizontally="true" 

    Necesidad de ser fijado en xml también. Sin toda esta marquesina no va a suceder. Nunca.

    Como @iDroid Explorer señaló, publicar y aceptar la respuesta puede ser de ayuda para alguien más. Adaptación de mi respuesta al comentario de Tom:

    Encontré la solución a mi problema. Después de algunos intentos me he dado cuenta de que el problema era el androide: selectAllOnFocus = "true" line (Lee la explicación de @ Tom para la razón probabale). Acabo de eliminar esa línea y ahora todo está funcionando muy bien, el texto es completo y desplazamiento como deseado cuando es demasiado largo para la vista que contiene.

    LinearLayout tu LinearLayout o tu TextView dentro de una HorizontalScrollView . Esto permitirá que el texto se muestre en su totalidad y permitir el desplazamiento a derecha e izquierda.

    Trate de establecer su layout_width a "match_parent". El TextView necesita un ancho específico para que las elipsis funcionen y no funcionará con "wrap_content".

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.