O WebView é um componente usado com frequência e que oferece um sistema avançado para
gerenciamento de estado. Um 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 mudanças de
configuração) recria a WebView, o que faz com que ela perca o estado.WebView
Resultados
Os componentes do WebView do app 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.
Gerenciar estado
Evite ao máximo a recriação de atividades durante mudanças de configuração e
deixe o WebView ser invalidado para que possa ser redimensionado, mantendo o estado.
Para gerenciar o estado do 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 porWebView.
Coleções que contêm este guia
Este guia faz parte das coleções de guias rápidos selecionados que abrangem objetivos mais amplos de desenvolvimento para Android: