Gerenciar o estado da WebView

O WebView é um componente usado com frequência e que oferece um sistema avançado para gerenciamento de estado. O WebView precisa manter o estado e a posição de rolagem durante as mudanças de configuração. Um WebView pode perder a posição de rolagem quando o usuário gira o dispositivo ou desdobra um smartphone dobrável, o que força o usuário a rolar novamente da parte de cima do WebView para a posição de rolagem anterior.

O WebView é bom em gerenciar o estado. Você pode aproveitar essa qualidade gerenciando o maior número possível de mudanças de configuração para minimizar o número de vezes que um WebView é recriado. Seu app precisa processar mudanças de configuração, porque a recriação de atividades (a maneira como o sistema processa essas mudanças) recria o WebView, o que faz com que o WebView perca o estado.

Gerenciar estado

Evite ao máximo a recriação da Activity durante as mudanças de configuração e deixe o WebView ser invalidado para que possa ser redimensionado, mantendo o estado.

Para gerenciar o estado WebView:

  • Declarar mudanças de configuração processadas pelo app
  • Invalidar o estado WebView

1. Adicionar mudanças de configuração ao arquivo AndroidManifest.xml do app

Para evitar a recriação de atividades, especifique as mudanças de configuração processadas pelo app, e não pelo sistema:

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. Invalidar o WebView sempre que o app receber uma mudança de configuração

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

Esta etapa se aplica apenas ao sistema de visualização, já que o Jetpack Compose não precisa invalidar nada para redimensionar corretamente os elementos Composable. No entanto, o Compose recria um WebView com frequência quando ele não é gerenciado corretamente.

Pontos principais

  • android:configChanges: atributo do elemento <activity> do manifesto. Lista as mudanças de configuração gerenciadas pela atividade.
  • View#invalidate(): método que faz com que uma visualização seja redesenhada. Herdado pelo WebView.

Resultados

Os componentes do WebView do app agora mantêm o estado e a posição de rolagem em várias mudanças de configuração, desde o redimensionamento e mudança de orientação até a dobra e o desdobramento do dispositivo.

Coleções que contêm este guia

Este guia faz parte destas coleções selecionadas de guias rápidos que abrangem metas mais amplas de desenvolvimento para Android:

Permita que seu app ofereça suporte a uma experiência do usuário otimizada em tablets, dispositivos dobráveis e ChromeOS.

Tem dúvidas ou feedback?

Acesse a página de perguntas frequentes e saiba mais sobre os guias rápidos ou entre em contato e conte o que você pensa.