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 telefon składany, co zmusza go do ponownego przewinięcia WebView od góry do poprzedniej pozycji.
Sprawdzone metody
Zminimalizuj liczbę ponownych tworzeń WebView. WebView dobrze radzi sobie z zarządzaniem stanem, a Ty możesz wykorzystać tę zaletę, zarządzając jak największą liczbą zmian konfiguracji. Aplikacja musi obsługiwać zmiany konfiguracji, ponieważ Activity ponowne tworzenie (sposób, w jaki system obsługuje zmiany konfiguracji) powoduje również ponowne tworzenie WebView, co sprawia, że WebView traci swój stan.
Składniki
android:configChanges: atrybut elementu<activity>w pliku manifestu. Zawiera listę zmian konfiguracji obsługiwanych przez aktywność.View#invalidate()Metoda, która powoduje ponowne narysowanie widoku. Odziedziczone przezWebView.
Kroki
Aby zapisać stan WebView, unikaj jak najczęściej ponownego tworzenia Activity, a następnie pozwól na unieważnienie WebView, aby można było zmienić jego rozmiar przy zachowaniu stanu.
1. Dodawanie zmian konfiguracji do zasobnika 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żnianie WebView przy 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 unieważniać niczego, aby prawidłowo zmienić rozmiar elementów Composable. Jeśli jednak nie jest on odpowiednio zarządzany, Compose często go odtwarza.WebView Użyj otoki Accompanist WebView, aby zapisywać i przywracać WebView stan w aplikacjach Compose.
Wyniki
Komponenty aplikacji WebView zachowują teraz swój stan i pozycję przewijania
przy 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.