WebView-Statusverwaltung

Symbol für Bewertung mit drei Sternen

WebView ist eine häufig verwendete Komponente, die ein fortschrittliches System für die Statusverwaltung bietet. Ein WebView muss seinen Status und seine Scrollposition bei Konfigurationsänderungen beibehalten. Bei einem WebView kann die Scrollposition verloren gehen, wenn der Nutzer das Gerät dreht oder ein faltbares Smartphone aufklappt. In diesem Fall muss der Nutzer noch einmal vom Anfang des WebView bis zur vorherigen Scrollposition scrollen.

Best Practices

Minimieren Sie die Anzahl der Neuerstellungen von WebView. WebView kann seinen Status gut verwalten. Sie können diese Funktion nutzen, indem Sie so viele Konfigurationsänderungen wie möglich verwalten. Ihre App muss Konfigurationsänderungen verarbeiten können, da durch die Neuerstellung von Activity (die Art und Weise, wie das System Konfigurationsänderungen verarbeitet) auch WebView neu erstellt wird. Dadurch verliert WebView seinen Status.

Zutaten

  • android:configChanges: Attribute des Manifestelements <activity>. Listet die Konfigurationsänderungen auf, die von der Aktivität verarbeitet werden.
  • View#invalidate(): Methode, die dazu führt, dass eine Ansicht neu gezeichnet wird. Von WebView übernommen.

Schritte

Um den WebView-Zustand zu speichern, vermeiden Sie die Neuerstellung von Activity so weit wie möglich und lassen Sie dann das WebView ungültig werden, damit es seine Größe ändern kann, ohne seinen Zustand zu verlieren.

1. Konfigurationsänderungen für AndroidManifest.xml hinzufügen

Vermeiden Sie die Neuerstellung von Aktivitäten, indem Sie die Konfigurationsänderungen angeben, die von Ihrer App (und nicht vom System) verarbeitet werden:

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

2. WebView bei Konfigurationsänderungen ungültig machen

Kotlin

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

Java

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

Dieser Schritt gilt nur für das Ansichtssystem, da bei Jetpack Compose nichts ungültig gemacht werden muss, um die Größe von Composable-Elementen korrekt anzupassen. Compose erstellt WebView jedoch häufig neu, wenn es nicht richtig verwaltet wird. Verwenden Sie den Wrapper Accompanist WebView, um den WebView-Status in Ihren Compose-Apps zu speichern und wiederherzustellen.

Ergebnisse

Die WebView-Komponenten Ihrer App behalten jetzt ihren Status und ihre Scrollposition bei mehreren Konfigurationsänderungen bei, von der Größenanpassung über die Änderung der Ausrichtung bis hin zum Auf- und Zuklappen.

Zusätzliche Ressourcen

Weitere Informationen zu Konfigurationsänderungen und deren Verwaltung finden Sie unter Konfigurationsänderungen verarbeiten.