Cómo agregar compatibilidad con la navegación de teclado

Además de los métodos de entrada de software, como teclados: Android admite teclados físicos conectados al dispositivo. R ofrece un modo conveniente para ingresar texto y permite que los usuarios navegar e interactuar con tu app. Aunque la mayoría de los dispositivos de mano, como los teléfonos usan el tacto como modo principal de interacción, las tablets y otros son populares, y a muchos usuarios les gusta colocarles accesorios de ellos.

Dado que cada vez más dispositivos con Android ofrecen este tipo de experiencia, es importante que optimices tu app para que admita la interacción a través de un teclado. Esta describe cómo puedes mejorar la navegación con un teclado.

Prueba tu app

Es posible que los usuarios ya puedan navegar por tu app con un teclado el sistema Android habilita la mayoría de los comportamientos necesarios de forma predeterminada.

Todos los widgets interactivos proporcionados por el framework de Android, como Button y EditText— son enfocable. Esto significa que los usuarios pueden navegar con dispositivos de control, como un pad direccional o teclado y cada widget se ilumina o cambia su apariencia cuando consigue el foco en la entrada.

Para probar tu app, realiza el siguiente procedimiento:

  1. Instala tu app en un dispositivo que ofrezca un teclado de hardware.

    Si no tienes un dispositivo de hardware con un teclado, conecta un Bluetooth o un teclado USB.

    También puedes hacer lo siguiente para usar Android Emulator:

    1. En el Administrador de AVD, haz clic en New Device o selecciona un perfil existente y haz clic en Clonar.
    2. En la ventana que aparece, asegúrate de que las opciones de Teclado y Dpad habilitado.
  2. Para probar tu app, usa solo la tecla Tab para navegar por tu de la IU de Google. Asegúrate de que cada control de la IU tenga el enfoque esperado.

    Busca cualquier instancia en la cual el foco se mueva en una forma.

  3. Vuelve a empezar desde el principio de la app y navega por la IU. mediante controles de dirección, como las teclas de flecha en el teclado. Desde cada enfocable en tu IU, presiona Arriba, Abajo, Izquierda y Derecha.

    Busca cualquier instancia en la cual el foco se mueva en una forma.

Si encuentras instancias en las que navegas con la tecla Tab o controles de dirección no hacen lo que esperas, especifica dónde debe estar 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, la el sistema pasa el foco de entrada entre los elementos según el orden en el que en el diseño. Si usas un diseño relativo, por ejemplo, y el orden de los elementos en la pantalla es diferente del orden del archivo, entonces quizás deba especificar manualmente el orden del enfoque.

Por ejemplo, en el siguiente diseño, dos botones están alineados a la derecha y hay un campo de texto alineado a la izquierda del segundo botón. Para aprobar el enfoque del primer botón al campo de texto y luego al segundo botón, los el diseño debe definir explícitamente el orden del foco para cada uno de los objetos de los elementos con el android:nextFocusForward .

<androidx.constraintlayout.widget.ConstraintLayout ...>
    <Button
        android:id="@+id/button1"
        android:nextFocusForward="@+id/editText1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        ... />
    <Button
        android:id="@+id/button2"
        android:nextFocusForward="@+id/button1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button1"
        ... />
    <EditText
        android:id="@id/editText1"
        android:nextFocusForward="@+id/button2"
        app:layout_constraintBottom_toBottomOf="@+id/button2"
        app:layout_constraintRight_toLeftOf="@id/button2
        ...  />
    ...
</androidx.constraintlayout.widget.ConstraintLayout>

Ahora, en lugar de que el foco cambie de button1 button2 y, luego, editText1, se trasladan según la apariencia en la pantalla: de button1 a editText1 y, luego, button2.

Cómo controlar la navegación direccional

Los usuarios también pueden navegar por tu app con las teclas de flecha del teclado, que se comporta de la misma manera que cuando navegas con un pad direccional o una bola de seguimiento. El sistema proporciona una “mejor estimación” a qué vista poner el foco en una dirección dada según el diseño de las vistas en la pantalla. Sin embargo, a veces el sistema adivinen el error.

Si el sistema no pasa el foco a la vista adecuada al navegar en una en una dirección determinada, especifica qué vista debe recibir el foco con los siguientes atributos:

Cada atributo designa la siguiente vista que recibirá el enfoque cuando el usuario navegue en esa dirección, según lo especificado por el ID de vista. Esto se muestra en el siguiente 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"
    ...  />

Recursos adicionales

Consulta los siguientes recursos relacionados: