Garanta a compatibilidade com a navegação por gestos

No Android 10 (nível 29 da API) e versões mais recentes, o sistema oferece suporte à navegação totalmente baseada em gestos. Há duas coisas que os desenvolvedores de apps precisam fazer para garantir que os apps sejam compatíveis com esse recurso:

  • Estender o conteúdo do app de ponta a ponta na tela
  • Resolver conflitos de gestos do app

Além disso, o Android 13 (nível 33 da API) introduz um gesto de volta preditivo para dispositivos Android, como smartphones, telas grandes e dobráveis, que faz parte de uma versão multianual. Os desenvolvedores de apps podem seguir algumas etapas para garantir que os apps sejam compatíveis com o gesto de volta preditivo.

Oferecer conteúdo de ponta a ponta no app

Para aproveitar o espaço extra na tela disponibilizado pela barra de navegação flutuante, é necessário configurar algumas mudanças no app.

Consulte Mostrar conteúdo de ponta a ponta no app para mais detalhes.

Processar gestos conflitantes do app

O modelo de navegação por gestos pode entrar em conflito com gestos que eram usados anteriormente por desenvolvedores de apps. Talvez seja necessário fazer ajustes na interface do usuário do app como resultado.

Conflitos com gestos de voltar

O novo gesto do sistema para voltar é um deslizar para dentro da borda esquerda ou direita da tela. Isso pode interferir nos elementos de navegação do app nessas áreas. Para manter a funcionalidade dos elementos nas bordas esquerda e direita da tela, desative o gesto de voltar de forma seletiva, indicando ao sistema quais regiões precisam receber entrada por toque. Para fazer isso, transmita um List<Rect> para a API View.setSystemGestureExclusionRects(), introduzida no Android 10. Esse método também está disponível em ViewCompat a partir de androidx.core:core:1.1.0-dev01.

Exemplo:

Kotlin

var exclusionRects = listOf(rect1, rect2, rect3)

fun onLayout(
        changedCanvas: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

fun onDraw(canvas: Canvas) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

Java

List<Rect> exclusionRects;

public void onLayout(
        boolean changedCanvas, int left, int top, int right, int bottom) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

public void onDraw(Canvas canvas) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

Conflitos com gestos de início ou de troca rápida

Os novos gestos do sistema para a tela inicial e a troca rápida envolvem deslizar na parte de baixo da tela, no espaço que antes era ocupado pela barra de navegação. Os apps não podem desativar esses gestos, como podem fazer com o gesto de voltar.

Para mitigar esse problema, o Android 10 apresenta a API WindowInsets.getMandatorySystemGestureInsets(), que informa aos apps os limites de reconhecimento de toque.

Jogos e outros apps sem visualização

Jogos e outros apps que não têm uma hierarquia de visualização geralmente exigem que o usuário deslize perto das áreas de gesto do sistema. Nesses casos, os jogos podem usar Window.setSystemGestureExclusionRects() para excluir áreas que se sobrepõem às reservadas para gestos do sistema. Os jogos precisam excluir essas áreas apenas quando necessário, como durante o jogo.

Se um jogo exigir que o usuário deslize perto da área de gesto de início, o app poderá solicitar que seja exibido no modo imersivo. Isso desativa os gestos do sistema enquanto o usuário interage com o jogo, mas permite que ele os reative deslizando de baixo para cima na tela.

Atualizar o app para oferecer suporte ao gesto de volta preditivo

O Android 13 (nível 33 da API) introduz um gesto de volta preditivo para dispositivos Android, como smartphones, telas grandes e dobráveis. O gesto de volta preditivo faz parte de uma versão de vários anos. Após a implementação, esse recurso vai permitir que o usuário visualize o destino ou o resultado de um gesto "Voltar" antes de concluí-lo. Assim, ele poderá decidir se quer continuar na visualização atual ou concluir a ação.

Consulte Adicionar suporte ao gesto de volta preditivo para mais detalhes.

Outros recursos

Para saber mais sobre a navegação por gestos, consulte:

Postagens do blog

Vídeos