Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
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:
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 pelo WebView.
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:
Otimizar para telas grandes
Permita que seu app ofereça suporte a uma experiência do usuário otimizada em tablets, dispositivos dobráveis e ChromeOS.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-02-06 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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)"]]