Developing Frogtek

El blog del Departamento de Tecnología

Efecto marquesina en Android

Cuando queremos mostrar un texto muy largo en una pequeña pantalla como la del móvil podemos crear un efecto de marquesina facilmente, podemos ponerlo a nivel de xml con esta propiedad.

android:ellipsize="marquee"

Sólo se activara cuando el objeto tenga el foco. Podemos forzarlo por código usando el método

 requestFocus() 

Al parecer no hace falta que el elemento tenga el foco para que active la marquesina, pero si debe tener el singleLine activado. Gracias a Maestro Linares por las correcciones.

Aquí la info oficial con el resto de valores.

Gracias a Gerardo sabemos algo más del comportamiento del efecto marquesina. Actualizo la entrada del post con sus comentario.

El TextView empezara a ser scrollable cuando tenga el foco y/o haya sido seteada como selected. Esto ultimo no puede hacerse desde el xml, por lo que sera necesario hacerlo desde el codigo.
El requestFocus puede funcionar, aunque es peligroso, ya que programaticamente estariamos dando el foco a ese objeto. Que sucede por ejemplo si queremos tener varios TextView con marquesina?.
Yo recomiendo hacerlo selected desde el codigo, por ejemplo en el onCreate:
mTextView.setSelected(true)

Y desde el xml indicar:

 android:singleLine=”true”
android:ellipsize=”marquee”

Si el TextView pertenece a un ListView este rotara el texto de forma automatica cuando el elemento tenga el foco.

5 Comentarios

  1. El TextView empezara a ser scrollable cuando tenga el foco y/o haya sido seteada como selected. Esto ultimo no puede hacerse desde el xml, por lo que sera necesario hacerlo desde el codigo.
    El requestFocus puede funcionar, aunque es peligroso, ya que programaticamente estariamos dando el foco a ese objeto. Que sucede por ejemplo si queremos tener varios TextView con marquesina?.
    Yo recomiendo hacerlo selected desde el codigo, por ejemplo en el onCreate:
    mTextView.setSelected(true)

    Y desde el xml indicar:
    android:singleLine=”true”
    android:ellipsize=”marquee”

    Si el TextView pertenece a un ListView este rotara el texto de forma automatica cuando el elemento tenga el foco.

    Ger

  2. Hola Gerardo.

    Tienes toda la razón, como ves eliminé la parte que hacia referencia al requestFocus. Es totalmente cierto que no podemos pedir el foco de varios componentes a la vez.

    Si no te importa voy a actualizar el post del blog con tus comentarios.

    Gracias por corregirme y comentar.

    Un saludo!!!

  3. singleLine ahora lo marca como “deprecated” ¿que propiedad habría que usar en cuenta?

    Saludos

  4. como le hago para darle mas velocidad al efecto?

Deja un comentario

Tu dirección de correo electrónico no será publicada.

*