WebView to powszechnie używany komponent, który oferuje zaawansowany system zarządzania stanem. WebView musi zachowywać swój stan i pozycję przewijania po zmianach konfiguracji. WebView może utracić pozycję przewijania, gdy użytkownik obróci urządzenie lub rozłoży składany telefon. Wymusza to ponowne przewijanie od góry WebView do poprzedniej pozycji.
Sprawdzone metody
Zminimalizuj liczbę przypadków ponownego tworzenia WebView. WebView dobrze zarządza swoim stanem, a Ty możesz wykorzystać tę jakość, zarządzając jak największą liczbą zmian konfiguracji. Twoja aplikacja musi obsługiwać zmiany konfiguracji, ponieważ ponowne tworzenie Activity (sposób, w jaki system obsługuje zmiany konfiguracji) powoduje również ponowne tworzenie WebView, co powoduje utratę stanu WebView.
Składniki
android:configChanges: atrybut elementu<activity>w manifeście. Zawiera listę zmian konfiguracji obsługiwanych przez aktywność.View#invalidate(): metoda, która powoduje ponowne narysowanie widoku. Dziedziczona przezWebView.
Kroki
Aby zapisać stan WebView, unikaj jak najczęściej ponownego tworzenia Activity, a następnie pozwól WebView na unieważnienie, aby można było zmienić jego rozmiar przy zachowaniu stanu.
1. Dodaj zmiany konfiguracji do pliku AndroidManifest.xml
Aby uniknąć ponownego tworzenia aktywności, określ zmiany konfiguracji obsługiwane przez aplikację (a nie przez system):
<activity
android:name=".MyActivity"
android:configChanges="screenLayout|orientation|screenSize
|keyboard|keyboardHidden|smallestScreenSize" />
2. Unieważnij WebView po zmianach konfiguracji
Kotlin
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
webView.invalidate()
}
Java
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
webview.invalidate();
}
Ten krok dotyczy tylko systemu widoków, ponieważ Jetpack Compose nie musi
niczego unieważniać, aby prawidłowo zmienić rozmiar Composable elementów. Jeśli jednak nie jest prawidłowo zarządzany, Compose często ponownie tworzy WebView. Aby zapisywać i przywracać stan WebView w aplikacjach Compose, użyj otoki
Accompanist WebView.
Wyniki
Komponenty WebView w Twojej aplikacji zachowują teraz swój stan i pozycję przewijania po wielu zmianach konfiguracji, od zmiany rozmiaru po zmianę orientacji, składanie i rozkładanie.
Dodatkowe materiały
Więcej informacji o zmianach konfiguracji i sposobach zarządzania nimi znajdziesz w artykule Obsługa zmian konfiguracji.