¿Diferencia entre enfocable y enfocableInTouchMode?

83

Quiero saber la diferencia real entre ellos ... ¿Cuándo se debe usar cada uno, cómo se debe usar cada uno y en qué situaciones es útil cada uno?

Dé algunos ejemplos y explíquelos en detalle.

AndroidGeek
fuente
android-developers.blogspot.fi/2008/12/touch-mode.html Aquí Romain dice que debe evitarse el uso de focusableInTouchMode a menos que esté desarrollando un juego
Niko
2
if focusable = false - no puede enfocar esta vista, incluso EditText si presiona el botón Siguiente en el teclado.
Volodymyr Kulyk

Respuestas:

77

Se explica en el Blog de desarrolladores de Android: http://android-developers.blogspot.co.at/2008/12/touch-mode.html

Las siguientes citas deben dejarlo claro:

Por sí solo, el modo táctil es algo muy fácil de entender, ya que simplemente indica si la última interacción del usuario se realizó con la pantalla táctil. Por ejemplo, si está usando un teléfono G1, seleccionar un widget con la bola de seguimiento lo sacará del modo táctil;

...

En el modo táctil, no hay enfoque ni selección. Cualquier elemento seleccionado en una lista de una cuadrícula se deselecciona tan pronto como el usuario ingresa al modo táctil. Del mismo modo, los widgets enfocados se desenfocan cuando el usuario ingresa al modo táctil.

...

Ahora que sabe que el enfoque no existe en el modo táctil, debo explicar que no es del todo cierto. El enfoque puede existir en modo táctil pero de una manera muy especial lo llamamos enfocable en modo táctil. Este modo especial fue creado para widgets que reciben entrada de texto, como EditText o, cuando el filtrado está habilitado, ListView.

...

Enfocable en modo táctil es una propiedad que puede establecer usted mismo desde código o XML. Sin embargo, debe usarse con moderación y solo en situaciones muy específicas, ya que rompe la coherencia con el comportamiento normal de Android. Un juego es un buen ejemplo de una aplicación que puede hacer un buen uso de la propiedad enfocable en modo táctil. MapView, si se usa en pantalla completa como en Google Maps, es otro buen ejemplo de dónde puede usar el enfoque en modo táctil correctamente.

Apfelsaft
fuente
5
Buena respuesta en el estilo SO adecuado. Gracias
Joop
11

Da algún ejemplo y explícalos en detalle

Te daré mi propia experiencia:

Tenía una aplicación de Google TV que tenía una actividad con una gran cantidad de ImageButtons.

Quería que los ImageButtons fueran seleccionables.

Entonces, si una persona hace clic en ellos con el mouse o el control remoto, solo se seleccionan (resaltado en mi caso). Luego, si el usuario presiona el seleccionado ImageButton, la acción se dispara. Este comportamiento exacto se logró habilitando la focusableInTouchModepropiedad a través del diseño XML.

Todo lo que tenía que hacer era establecer un valor normal onClickListenerpara los ImageButtons y ¡listo!

No he revisado mi aplicación en el teléfono, pero supongo que obtendría un resultado familiar.

EDITAR

¿Cuando?

Le conté un caso de uso que probé: cuando desea que sus botones onClickListeneractiven la acción en su segundo clic, después de haber hecho clic y seleccionado Button.

Utilicé el primer clic para ganar "enfoque" y mostrar una animación de ampliación de zoom en mi botón.

¿Cómo?

Simplemente establezca la propiedad del botón focusableInTouchModeen trueen su archivo de diseño XML.

Behnam
fuente
cuándo usarlos. cómo son útiles
AndroidGeek
7

Enfocado es un estado de visualización y generalmente el enfoque se puede cambiar con trackball y dpad. Su vista puede tener un fondo diferente cuando el estado está enfocado.

Enfocable en el modo táctil permite que la vista se enfoque cuando el usuario toca la vista, un buen ejemplo de este tipo de componente es EditText.

Con Buttono cualquier estado presionado de un componente en el que se puede hacer clic es generalmente lo que le interesa.

Niko
fuente
"Con Button o cualquier componente en el que se pueda hacer clic, debería centrarse en el estado presionado". ¿Qué? el resto de la respuesta +1
ataulm
3

Los usuarios pueden interactuar con sus dispositivos mediante el uso de teclas o botones de hardware o tocando la pantalla. Tocar la pantalla pone el dispositivo en modo táctil. El usuario puede luego interactuar con él tocando los botones virtuales, imágenes, etc. en pantalla.

Para comprobar si el dispositivo está en modo táctil, llame al método isInTouchMode () de la clase View .

M_ Fa
fuente