Focar em campos de texto

Quando os usuários navegam em uma interface do Compose com um teclado físico, um direcional ou um controle giratório, os campos de texto participam da navegação por foco junto com outros destinos de foco.

Por padrão, o foco não fica preso em campos de texto. Não é necessário adicionar manipuladores de eventos de tecla personalizados (onKeyEvent ou onPreviewKeyEvent) para permitir que os usuários saiam de um campo de texto. Os usuários podem sair usando Shift+Tab ou navegando além dos limites do texto com as teclas direcionais.

O KeyboardOptions pode ser usado para fornecer uma ação intuitiva do teclado de software que coordena com a navegação do teclado de hardware. ImeAction.Next move o foco para o próximo alvo, por exemplo.

Transição de foco unidimensional

Na transição de foco unidimensional, o comportamento da tecla Tab depende do lineLimits configurado no campo de texto:

  • Campos de texto de uma única linha (TextFieldLineLimits.SingleLine) Ao pressionar a tecla Tab, o foco é movido para o próximo alvo de foco na interface.
  • Campos de texto de várias linhas (TextFieldLineLimits.MultiLine() ou padrão): pressionar a tecla Tab insere um caractere de tabulação (\t) no buffer de texto em vez de mover o foco.
  • Navegação inversa (Shift+Tab): ao pressionar Shift+Tab, o foco é movido para trás para o destino de foco anterior em campos de texto de uma ou várias linhas.

// Single-line text field: Tab advances focus to the next focus target
BasicTextField(
    state = singleLineState,
    lineLimits = TextFieldLineLimits.SingleLine,
    modifier = Modifier.fillMaxWidth()
)

// Multi-line text field: Tab inserts '\t'; Shift + Tab moves to previous target
BasicTextField(
    state = multiLineState,
    lineLimits = TextFieldLineLimits.MultiLine(),
    modifier = Modifier.fillMaxWidth()
)

Transição de foco bidimensional

Ao usar as teclas de seta (ou um botão direcional), as teclas direcionais primeiro movem o cursor de texto (circunflexo) no campo de texto:

  • Navegação vertical (para cima / para baixo): Pressionar a tecla Down move o cursor de texto para baixo, linha por linha. Quando o cursor de texto chega à última linha, pressionar a tecla Para baixo novamente transfere o foco para o alvo adjacente abaixo da caixa de texto. Ao pressionar a tecla Para cima na primeira linha, o foco é movido para o alvo anterior.
  • Navegação horizontal (esquerda / direita / início / fim): pressionar as teclas de seta horizontal move o cursor de texto pelos caracteres. Quando o cursor de texto chega ao início ou ao fim do buffer de texto, pressionar a tecla direcional novamente transfere o foco para o alvo adjacente nessa direção.

Campos de texto no Android TV

No Android TV, usando controles de botão direcional sem um teclado físico:

  1. Mover o foco para um campo de texto mostra automaticamente o teclado de software na tela.
  2. O usuário navega pelas teclas do teclado de software usando o botão direcional.
  3. Ao pressionar o botão Voltar, o teclado de software é dispensado mantendo o foco no campo de texto.
  4. Depois que o teclado de software é dispensado, pressionar as teclas direcionais do botão direcional move o foco para alvos de foco vizinhos na tela.
  5. Pressionar o botão Voltar uma segunda vez aciona a navegação de retorno padrão do sistema.