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.
Práticas recomendadas
Minimize o número de vezes que um WebView é recriado. O WebView é bom em gerenciar o estado, e você pode aproveitar essa qualidade gerenciando o maior número possível de mudanças de configuração. Seu app precisa processar mudanças de configuração, porque a recriação da Activity (a maneira como o sistema processa essas mudanças) também recria o WebView, o que faz com que o WebView perca o estado.
Ingredientes
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.
Etapas
Para salvar o estado do WebView, evite ao máximo a recriação do Activity e deixe o WebView ser invalidado para que possa ser redimensionado, mantendo o estado.
1. Adicionar mudanças de configuração ao AndroidManifest.xml
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 WebView em mudanças 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 se não for gerenciado corretamente. Use o
wrapper Accompanist WebView para salvar e restaurar o estado WebView
nos apps do Compose.
Resultados
Os componentes 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.
Outros recursos
Para saber mais sobre as mudanças de configuração e como elas são gerenciadas, consulte Gerenciar mudanças de configuração.