2011-09-03 6 views
8

Esto se preguntó en otro lugar, pero la solución no funcionó para mí. Así que posarlo de nuevo con más contexto. El problema es que una actividad contiene una vista de texto del título de la música desplazable que se ve interrumpida por una vista de texto del contador de tiempo transcurrido.Configuración de TextView detiene el desplazamiento de marquesina de otra TextView

Tengo estos dos widgets TextView en mi diseño de actividad (aunque están abarcados por otros contenedores de diseño).

<TextView android:id="@+id/v_current_time" 
    android:minWidth="26dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:gravity="right|center_vertical" 
    android:singleLine="true" 
    android:textSize="12sp" 
    android:enabled="false" 
    /> 

<TextView android:id="@+id/v_track_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:textStyle="normal" 
    android:singleLine="true" 
    android:ellipsize="marquee" 
    android:marqueeRepeatLimit="marquee_forever" 
    android:scrollHorizontally="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:enabled="true" 
/> 

El título de la música se establece dinámicamente a (en el caso de prueba) una larga línea de texto. Si nunca actualizo el texto de la hora actual con la siguiente línea, el título de la música se desplazará felizmente sin importar cómo interactúe con mis botones de pausa y reproducción.

tvCurrentTime.setText(DataFormat.formatTime(progress)); 

Pero si configuro el texto para la hora actual, el título de la música se detendrá. Presionando mi botón de pausa de alguna manera se inicia el desplazamiento hacia atrás, pero al presionar Reproducir hará que la hora actual se actualice y se detenga de nuevo.

por la sugerencia en este hilo, me trató de acoplar el ajuste del texto en tiempo con la re-habilitación del título de desplazamiento de la siguiente manera:

tvCurrentTime.setText(DataFormat.formatTime(progress)); 
tvTitle.setEnabled(true); 

esto no tiene ningún efecto sobre el fallo que no sea para restablecer el scroller cada vez que se reinicia.

¿Hay algún detalle que me falta, o alguna otra idea sobre qué podría estar yendo mal? ¡Muchas gracias!

Respuesta

7

Marquee es problemático. Cuando TextView (o la ventana que contiene TextView) pierde el foco, la marquesina se detiene y se reinicia (consulte las fuentes de TextView). supongo que hay 3 soluciones posibles aquí:

  1. Puede establecer android:focusable="false" en las otras con su diseño. De esta forma, su TextView no debería perder el foco. Pero esa no es probablemente la solución que quieres.
  2. Puede subescribir TextView y cambiar onFocusChanged() y onWindowFocusChanged() para evitar que la marquesina se detenga y restablezca.
  3. Crea tu propia implementación de marquesina.
+7

Resulta que las configuraciones XML de TextView anteriores funcionan bien sin ningún cambio de tiempo de ejecución (para restablecer habilitado = verdadero o lo que sea) SI elimino RelativeLayout en mi archivo de diseño y las reemplazo con LinearLayout. Y ni la sugerencia 1 o 2 de arriba (no estoy seguro de 3) funciona si no lo hago. Esa es una falla sutil y falsa indocumentada de RelativeLayout. ¿Hay alguna solución alternativa para esto aparte de reorganizar el archivo de diseño para no usar diseños relativos?Ni siquiera estoy seguro de que sea posible, ya que recuerdo haber tenido que usar los diseños relativos para superar los problemas de diseño con diseños lineales solamente. – Groovee60

+6

Gracias por este comentario. 'RelativeLayout' está causando eso. Al usar 'LinearLayout', la marquesina funciona bien y la actualización de otras vistas no la rompe. Esta información merece una respuesta propia ... – Knickedi

5

Hay otra manera de resolver esto sin eliminar todo RelativeLayout.

Simplemente puede ajustar la marquesina TextView con un LinearLayout dentro de RelativeLayout como contenedor.

+0

Esto funciona como el encanto. ¡Gracias hombre! –

+0

¡Con mucho, la mejor respuesta! –

2

(Promoting comment above to a answer) Resulta que las configuraciones XML de TextView funcionan bien sin ningún cambio de tiempo de ejecución (para restablecer enabled = verdadero o lo que sea) SI elimino RelativeLayout en mi archivo de diseño y las reemplazo por LinearLayout's. Y ni la sugerencia 1 o 2 de arriba (no estoy seguro de 3) funciona si no lo hago. Eso parece una falla sutil y falsa indocumentada de RelativeLayout.