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.
WebView
è in grado di gestire il proprio stato. Puoi sfruttare questa qualità
gestendo il maggior numero possibile di modifiche alla configurazione per ridurre al minimo il numero di
volte in cui viene ricreato un WebView
. La tua app deve gestire le modifiche alla configurazione
perché la ricreazione dell'attività (il modo in cui il sistema gestisce le modifiche alla configurazione)
ricrea WebView
, il che causa la perdita di stato di WebView
.
Risultati
I componenti WebView
dell'app mantengono il loro stato e la posizione di scorrimento in seguito a
più modifiche alla configurazione, dal ridimensionamento alle modifiche dell'orientamento, fino all'apertura e alla chiusura del dispositivo.
Gestisci stato
Evita il più possibile la ricreazione dell'attività durante le modifiche alla configurazione e
consenti l'invalidazione di WebView
in modo che possa essere ridimensionato mantenendo il suo stato.
Per gestire lo stato di WebView
:
- Dichiarare le modifiche alla configurazione gestite dall'app
- Invalidare lo stato
WebView
1. Aggiungere modifiche alla configurazione al file AndroidManifest.xml
dell'app
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. Invalida WebView
ogni volta che la tua app riceve una modifica 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.
Punti chiave
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
.
Raccolte che contengono questa guida
Questa guida fa parte di queste raccolte selezionate di guide rapide che coprono obiettivi di sviluppo Android più ampi:
