Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
WebView è un componente di uso comune che offre un sistema avanzato per la gestione degli stati. Un WebView
deve mantenere il proprio stato e la posizione di scorrimento durante le modifiche alla configurazione. Un
WebView può perdere la posizione di scorrimento quando l'utente ruota il dispositivo o apre
un telefono pieghevole, il che costringe l'utente a scorrere di nuovo dalla parte superiore del
WebView alla posizione di scorrimento precedente.
WebView è bravo a gestire il proprio stato. Puoi sfruttare questa qualità
gestendo il maggior numero possibile di modifiche di configurazione per ridurre al minimo il numero di volte
in cui viene ricreato un WebView. L'app deve gestire le modifiche alla configurazione perché la ricreazione delle attività (il modo in cui il sistema gestisce le modifiche alla configurazione) ricrea il WebView, che perde lo stato.WebView
Gestisci stato
Evita di ricreare Activity il più possibile durante le modifiche alla configurazione e lascia che WebView venga invalidato in modo che possa ridimensionarsi mantenendo il proprio stato.
Per gestire lo stato di WebView:
Dichiarare le modifiche alla configurazione gestite dalla tua app
Annullare lo stato WebView
1. Aggiungere modifiche di configurazione al file AndroidManifest.xml dell'app
Evita la ricreazione delle attività specificando le modifiche alla configurazione gestite dalla tua app (anziché dal sistema):
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 manifest <activity>. Elenca le modifiche alla configurazione gestite dall'attività.
View#invalidate(): metodo che causa il ricalcolo di una vista. Ereditata da WebView.
Risultati
I componenti WebView dell'app ora mantengono il loro stato e la posizione di scorrimento anche dopo più modifiche alla configurazione, dal ridimensionamento alle modifiche dell'orientamento fino all'apertura e alla chiusura del dispositivo.
Raccolte che contengono questa guida
Questa guida fa parte di queste raccolte di guide rapide selezionate che coprono obiettivi di sviluppo Android più ampi:
Ottimizzazione per schermi di grandi dimensioni
Consenti alla tua app di supportare un'esperienza utente ottimizzata su tablet, dispositivi pieghevoli e ChromeOS.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-02-06 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-02-06 UTC."],[],[],null,["# Manage WebView state\n\n[`WebView`](/reference/kotlin/android/webkit/WebView) is a commonly used\ncomponent that offers an advanced system for state management. A `WebView`\nmust maintain its state and scroll position across configuration changes. A\n`WebView` can lose scroll position when the user rotates the device or unfolds\na foldable phone, which forces the user to scroll again from the top of the\n`WebView` to the previous scroll position.\n\n`WebView` is good at managing its state. You can take advantage of this quality\nby managing as many configuration changes as possible to minimize the number of\ntimes a `WebView` is recreated. Your app should handle configuration changes\nbecause activity recreation (the system's way of handling configuration\nchanges) recreates the `WebView`, which causes the `WebView` to lose state.\n\nManage state\n------------\n\nAvoid [`Activity`](/reference/kotlin/android/app/Activity) recreation as much as\npossible during configuration changes, and let the `WebView` invalidate so it\ncan resize while retaining its state.\n\nTo manage `WebView` state:\n\n- Declare configuration changes handled by your app\n- Invalidate the `WebView` state\n\n#### 1. Add configuration changes to your app's `AndroidManifest.xml` file\n\nAvoid activity recreation by specifying the configuration changes handled by\nyour app (rather than by the system): \n\n \u003cactivity\n android:name=\".MyActivity\"\n android:configChanges=\"screenLayout|orientation|screenSize\n |keyboard|keyboardHidden|smallestScreenSize\" /\u003e\n\n| **Note:** While this nonexhaustive list of configuration changes might be okay for many applications, make sure to manage the configuration changes that make the most sense for your case based on how your users interact with the app, for how long, and when. To find the best combination of configurations for your app, see [`android:configChanges`](/guide/topics/manifest/activity-element#config).\n\n#### 2. Invalidate `WebView` whenever your app receives a configuration change\n\n### Kotlin\n\n```kotlin\noverride fun onConfigurationChanged(newConfig: Configuration) {\n super.onConfigurationChanged(newConfig)\n webView.invalidate()\n}\n```\n\n### Java\n\n```java\n@Override\npublic void onConfigurationChanged(@NonNull Configuration newConfig) {\n super.onConfigurationChanged(newConfig);\n webview.invalidate();\n}\n```\n\nThis step applies only to the view system, as Jetpack Compose does not need to\ninvalidate anything to resize\n[`Composable`](/reference/kotlin/androidx/compose/runtime/Composable) elements\ncorrectly. However, Compose recreates a `WebView` often if not managed\ncorrectly.\n\nKey points\n----------\n\n- [`android:configChanges`](/guide/topics/manifest/activity-element#config): Attribute of the manifest `\u003cactivity\u003e` element. Lists the configuration changes handled by the activity.\n- [`View#invalidate()`](/reference/kotlin/android/view/View#invalidate_2): Method that causes a view to be redrawn. Inherited by `WebView`.\n\nResults\n-------\n\nYour app's `WebView` components now retain their state and scroll position\nacross multiple configuration changes, from resizing to orientation changes\nto device folding and unfolding.\n\nCollections that contain this guide\n-----------------------------------\n\nThis guide is part of these curated Quick Guide collections that cover\nbroader Android development goals: \n\n### Optimize for large screens\n\nEnable your app to support an optimized user experience on tablets, foldables, and ChromeOS devices. \n[Quick guide collection](/quick-guides/collections/optimize-for-large-screens) \n\nHave questions or feedback\n--------------------------\n\nGo to our frequently asked questions page and learn about quick guides or reach out and let us know your thoughts. \n[Go to FAQ](/quick-guides/faq) [Leave feedback](https://issuetracker.google.com/issues/new?component=1573691&template=1993320)"]]