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.