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 peloWebView
.
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:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=pt-br)