WebView è un componente di uso comune che offre un sistema avanzato per
la gestione dello stato. Un WebView deve mantenere il proprio stato e la posizione di scorrimento in seguito alle modifiche alla configurazione. Un WebView può perdere la posizione di scorrimento quando l'utente ruota il dispositivo o apre uno smartphone pieghevole, il che lo costringe a scorrere di nuovo dall'inizio del WebView fino alla posizione di scorrimento precedente.
Best practice
Riduci al minimo il numero di volte in cui viene ricreato un WebView. WebView è in grado di
gestire il proprio stato e puoi sfruttare questa qualità gestendo il maggior numero possibile
di modifiche alla configurazione. La tua app deve gestire le modifiche alla configurazione
perché la ricreazione di Activity (il modo in cui il sistema gestisce le modifiche alla configurazione)
ricrea anche WebView, che causa la perdita dello stato di WebView.
Ingredienti
android:configChanges: attributo dell'elemento<activity>del file manifest. Elenca le modifiche alla configurazione gestite dall'attività.View#invalidate(): metodo che causa il ridisegno di una visualizzazione. Ereditato daWebView.
Passaggi
Per salvare lo stato di WebView, evita la ricreazione di Activity il più possibile, quindi lascia che WebView venga invalidato in modo che possa essere ridimensionato mantenendo il suo stato.
1. Aggiungi modifiche alla configurazione a AndroidManifest.xml
Evita la ricreazione dell'attività specificando le modifiche alla configurazione gestite dalla tua app (anziché dal sistema):
<activity
android:name=".MyActivity"
android:configChanges="screenLayout|orientation|screenSize
|keyboard|keyboardHidden|smallestScreenSize" />
2. Invalidare WebView in caso di modifiche alla configurazione
Kotlin
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
webView.invalidate()
}
Java
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
webview.invalidate();
}
Questo passaggio si applica solo al sistema di visualizzazione, poiché Jetpack Compose non deve invalidare nulla per ridimensionare correttamente gli elementi Composable. Tuttavia,
Compose ricrea spesso un WebView se non viene gestito correttamente. Utilizza il wrapper
WebView di Accompanist per salvare e ripristinare lo stato di WebView
nelle tue app Compose.
Risultati
I componenti WebView della tua app ora mantengono lo stato e la posizione di scorrimento
in seguito a più modifiche alla configurazione, dal ridimensionamento al cambio di orientamento, fino
alla chiusura e all'apertura.
Risorse aggiuntive
Per scoprire di più sulle modifiche alla configurazione e su come gestirle, consulta Gestire le modifiche alla configurazione.