
WebView — это широко используемый компонент, предлагающий расширенную систему управления состоянием. WebView должен сохранять своё состояние и положение прокрутки при изменении конфигурации. WebView может потерять положение прокрутки, когда пользователь поворачивает устройство или разворачивает складной телефон, что вынуждает пользователя снова прокручивать WebView с верхней части экрана до предыдущего положения прокрутки.
Передовые методы
Сведите к минимуму количество пересозданий WebView . WebView хорошо управляет своим состоянием, и вы можете использовать это свойство, обрабатывая как можно больше изменений конфигурации. Ваше приложение должно обрабатывать изменения конфигурации WebView потому что пересоздание Activity (системный способ обработки изменений конфигурации) также пересоздает WebView , что приводит к потере его состояния.
Ингредиенты
-
android:configChanges: Атрибут элемента<activity>манифеста. Отображает изменения конфигурации, обрабатываемые активностью. -
View#invalidate(): Метод, вызывающий перерисовку представления. Наследуется классомWebView.
Шаги
Чтобы сохранить состояние WebView , по возможности избегайте повторного создания Activity , а затем позвольте WebView стать недействительным, чтобы он мог изменить размер, сохранив при этом свое состояние.
1. Внесите изменения в конфигурацию в файл AndroidManifest.xml
Избегайте повторного выполнения действий, указав, что изменения конфигурации обрабатываются вашим приложением (а не системой):
<activity
android:name=".MyActivity"
android:configChanges="screenLayout|orientation|screenSize
|keyboard|keyboardHidden|smallestScreenSize" />
2. Аннулировать WebView при изменении конфигурации.
Котлин
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
webView.invalidate()
}
Java
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
webview.invalidate();
}
Этот шаг относится только к системе представлений, поскольку Jetpack Compose не требует аннулирования каких-либо данных для корректного изменения размера элементов Composable . Однако Compose часто пересоздает WebView , если им неправильно управлять. Используйте обертку Accompanist WebView для сохранения и восстановления состояния WebView в ваших приложениях Compose.
Результаты
Компоненты WebView вашего приложения теперь сохраняют свое состояние и положение прокрутки при различных изменениях конфигурации, от изменения размера и ориентации до сворачивания и разворачивания.
Дополнительные ресурсы
Чтобы узнать больше об изменениях конфигурации и способах управления ими, см. раздел «Обработка изменений конфигурации» .