Gestion de l'état WebView

Icône de note de trois étoiles

WebView est un composant couramment utilisé qui propose un système avancé de gestion des états. Un WebView doit conserver son état et sa position de défilement lors des modifications de configuration. Un WebView peut perdre la position de défilement lorsque l'utilisateur fait pivoter l'appareil ou déplie un téléphone pliable, ce qui l'oblige à faire défiler à nouveau la WebView du haut jusqu'à la position de défilement précédente.

Bonnes pratiques

Minimisez le nombre de fois où une WebView est recréée. WebView est capable de gérer efficacement son état, et vous pouvez en profiter pour gérer autant de modifications de configuration que possible. Votre application doit gérer les modifications de configuration, car la recréation d'Activity (méthode du système pour gérer les modifications de configuration) recrée également la WebView, ce qui entraîne la perte de l'état de la WebView.

Ingrédients

  • android:configChanges : attribut de l'élément <activity> du fichier manifeste. Recense les modifications de configuration gérées par l'activité.
  • View#invalidate() : lorsque cette méthode est utilisée, une vue est redessinée. Héritée par WebView.

Étapes

Pour enregistrer l'état de la WebView, évitez autant que possible la recréation d'Activity et laissez ensuite la WebView s'invalider afin qu'elle puisse se redimensionner tout en conservant son état.

1. Ajouter des modifications de configuration à AndroidManifest.xml

Pour éviter la recréation de l'activité, spécifiez les modifications de configuration gérées par votre application (plutôt que par le système) :

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. Invalider WebView lors des modifications de configuration

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

Cette étape ne s'applique qu'au système de vues, car Jetpack Compose n'a pas besoin d'invalider quoi que ce soit pour redimensionner correctement les éléments Composable. Cependant, Compose recrée souvent un élément WebView s'il n'est pas géré correctement. Utilisez le wrapper Accompanist WebView pour enregistrer et restaurer l'état de la WebView dans vos applications Compose.

Résultats

Les composants WebView de votre application conservent désormais leur état et leur position de défilement lors de plusieurs modifications de configuration, du redimensionnement au changement d'orientation, en passant par le pliage et le dépliage.

Ressources supplémentaires

Pour en savoir plus sur les modifications de configuration et sur leur gestion, consultez Gérer les modifications de configuration.