Además de los métodos de entrada de software (como los teclados en pantalla), Android admite la conexión de teclados físicos al dispositivo. Un teclado no solo ofrece el ingreso de texto de manera cómoda, sino que también permite que los usuarios interactúen y naveguen en tu app. Aunque la mayoría de los dispositivos portátiles, como los teléfonos, usan los eventos táctiles como el modo principal de interacción, las tablets y otros dispositivos similares son cada vez más populares y muchos usuarios prefieren conectarles accesorios de teclado.
A medida que más dispositivos Android ofrecen este tipo de experiencia, es importante que optimices tu app para que sea compatible con la interacción a través de un teclado. En esta lección, se describe cómo puedes ofrecer una mejor compatibilidad con la navegación con un teclado.
Nota: La compatibilidad con la navegación direccional también es importante a fin de garantizar que tu aplicación sea accesible para los usuarios que no naveguen mediante elementos visuales. La compatibilidad con la navegación direccional en tu aplicación también puede ayudarte a automatizar las pruebas de la interfaz de usuario con herramientas como uiautomator.
Consulta los siguientes recursos relacionados:
Cómo probar tu app
Es posible que los usuarios ya puedan navegar en tu app con un teclado, porque el sistema Android habilita la mayoría de los comportamientos necesarios de forma predeterminada.
Se pueden enfocar todos los widgets interactivos proporcionados por el marco de trabajo de Android (como Button
y EditText
). Esto significa que los usuarios pueden navegar con dispositivos de control, como un pad direccional o un teclado, y cada widget se ilumina o cambia su apariencia cuando obtiene un foco de entrada.
Para probar tu app, haz lo siguiente:
- Instala tu app en un dispositivo que ofrezca un teclado de hardware.
Si no tienes un dispositivo de hardware con un teclado, conecta un teclado Bluetooth o USB (aunque no todos los dispositivos admiten accesorios USB).
También puedes hacer lo siguiente para usar Android Emulator:
- En el Administrador de AVD, haz clic en New Device o selecciona un perfil existente y haz clic en Clone.
- En la ventana que aparece, asegúrate de que estén habilitadas las opciones Keyboard y DPad.
- Para probar tu app, usa solo la tecla Tab para navegar por la IU y asegúrate de que cada control de la IU obtenga el foco esperado.
Busca cualquier instancia en la que el foco se mueva de una manera inesperada.
- Comienza desde el principio de tu app y esta vez usa los controles de dirección (las teclas de flecha del teclado) para navegar.
Desde cada elemento de IU que se puede enfocar, presiona Arriba, Abajo, Izquierda y Derecha.
Busca cualquier instancia en la que el foco se mueva de una manera inesperada.
Si encuentras alguna instancia en la que la navegación con la tecla Tab o los controles de dirección no hacen lo que esperas, especifica dónde debe ir el foco en tu diseño, como se explica en las siguientes secciones.
Cómo controlar la navegación de pestañas
Cuando un usuario navega por tu app con la tecla Tab del teclado, el sistema pasa el foco de entrada entre los elementos según el orden en que aparecen en el diseño. Si usas un diseño relativo, por ejemplo, y el orden de los elementos en la pantalla es diferente al orden del archivo, es posible que debas especificar manualmente el orden del foco.
Por ejemplo, en el siguiente diseño, hay dos botones alineados en el lado derecho y un campo de texto alineado a la izquierda del segundo botón. Para pasar el foco del primer botón al campo de texto y luego al segundo botón, el diseño debe definir explícitamente el orden del foco para cada uno de los elementos con el atributo android:nextFocusForward
:
<RelativeLayout ...> <Button android:id="@+id/button1" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:nextFocusForward="@+id/editText1" ... /> <Button android:id="@+id/button2" android:layout_below="@id/button1" android:nextFocusForward="@+id/button1" ... /> <EditText android:id="@id/editText1" android:layout_alignBottom="@+id/button2" android:layout_toLeftOf="@id/button2" android:nextFocusForward="@+id/button2" ... /> ... </RelativeLayout>
Ahora, en lugar de enviar el foco de button1
a button2
y luego a editText1
, el foco se mueve apropiadamente según la apariencia de la pantalla: de button1
a editText1
y luego a button2
.
Cómo controlar la navegación direccional
Los usuarios también pueden navegar por tu app con las teclas de flecha de un teclado (el comportamiento es el mismo que cuando se navega con un pad direccional o una bola de seguimiento). El sistema proporciona una mejor suposición sobre qué vista debe enfocarse en una dirección específica, según el diseño de las vistas en pantalla. A veces, sin embargo, el sistema puede adivinar incorrectamente.
Si el sistema no pasa el foco a la vista apropiada cuando navega en una dirección determinada, debes usar los siguientes atributos para especificar qué vista debe recibir el foco:
Cada atributo designa la siguiente vista que recibirá el foco cuando el usuario navegue en esa dirección, según lo que especifique el ID de la vista. Por ejemplo:
<Button android:id="@+id/button1" android:nextFocusRight="@+id/button2" android:nextFocusDown="@+id/editText1" ... /> <Button android:id="@id/button2" android:nextFocusLeft="@id/button1" android:nextFocusDown="@id/editText1" ... /> <EditText android:id="@id/editText1" android:nextFocusUp="@id/button1" ... />