Suporte à navegação com o teclado

Além dos métodos de entrada simples, como na tela Teclados: o Android oferece suporte a teclados físicos conectados ao dispositivo. Um teclado oferece um modo conveniente para entrada de texto e uma maneira de os usuários navegar e interagir com seu aplicativo. Embora a maioria dos dispositivos portáteis, como Celulares usam o toque como modo principal de interação, tablets e similares são populares e muitos usuários gostam de conectar teclados acessórios para resolvê-los com rapidez.

Como cada vez mais dispositivos Android oferecem esse tipo de experiência, é importante otimizar o aplicativo para oferecer suporte à interação por meio de um teclado. Isso documento descreve como melhorar a navegação com teclado.

Testar o app

Talvez os usuários já possam navegar no app usando um teclado, porque o sistema Android ativa a maioria dos comportamentos necessários por padrão.

Todos os widgets interativos fornecidos pelo framework do Android, como Button e EditText) são focalizável. Isso significa que os usuários podem navegar com dispositivos de controle, como um botão direcional ou teclado, e cada widget brilha ou muda de aparência quando ganha o foco de entrada.

Para testar o app, siga este procedimento:

  1. Instale seu app em um dispositivo que ofereça um teclado físico.

    Se você não tem um dispositivo de hardware com um teclado, conecte um dispositivo Bluetooth ou um teclado USB.

    Você também pode usar o Android Emulator:

    1. No AVD Manager, clique em New Device ou selecione um perfil existente e clique em Clonar.
    2. Na janela que aparece, verifique se o Teclado e o Dpad estão ativado.
  2. Para testar seu app, use apenas a tecla Tab para navegar pelo de ML pela IU. Verifique se cada controle de interface recebe o foco conforme esperado.

    Procure instâncias em que o foco se mova de maneira inesperada forma

  3. Começar de novo do início do app e navegar pela interface usando controles de direção, como as teclas de seta do teclado. De cada focalizável na IU, pressione as teclas para cima e para baixo, Left e Right.

    Procure instâncias em que o foco se mova de maneira inesperada forma

Se você encontrar casos em que a navegação com a tecla Tab ou de direção não fazem o que você espera, especifique onde o foco deve estejam no seu layout, conforme discutido nas seções a seguir.

Gerenciar a navegação com a tecla "Tab"

Quando um usuário navega pelo app usando a tecla Tab do teclado, a o sistema passa o foco de entrada entre os elementos com base na ordem em que eles aparecem no layout. Se você usar um layout relativo, por exemplo, e a ordem de elementos na tela for diferente da ordem no arquivo, pode precisar especificar manualmente a ordem de foco.

Por exemplo, no layout a seguir, dois botões estão alinhados à direita e um campo de texto é alinhado à esquerda do segundo botão. Para ser aprovado do primeiro botão para o campo de texto e depois para o segundo botão, o precisa definir explicitamente a ordem de foco de cada um dos elementos focalizáveis com os 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>

Agora, em vez de o foco mudar de button1 para button2 e depois editText1, ele será movido adequadamente de acordo com a aparência na tela: de button1 a editText1 e depois button2.

Gerenciar navegação direcional

Os usuários também podem navegar pelo app usando as teclas de seta no teclado, o que comporta-se da mesma forma que ao navegar com um botão direcional ou trackball. O sistema dê um "melhor palpite" para qual visualização focar em uma determinada direção com base no layout das visualizações na tela. No entanto, às vezes o sistema adivinha errado.

Se o sistema não passar o foco para a visualização adequada ao navegar em um determinada direção, especifique qual visualização deve receber foco com o seguinte atributos:

Cada atributo designa a próxima visualização a receber foco quando o usuário navega nessa direção, conforme especificado pelo ID da visualização. Isso é mostrado exemplo a seguir:

<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"
    ...  />

Outros recursos

Confira estes recursos relacionados: