WebView — это широко используемый компонент, предлагающий расширенную систему управления состоянием. WebView должен сохранять своё состояние и положение прокрутки при изменении конфигурации. WebView может потерять положение прокрутки, когда пользователь поворачивает устройство или разворачивает складной телефон, что вынуждает пользователя снова прокручивать WebView с верхней части экрана до предыдущего положения прокрутки.
WebView хорошо справляется с управлением своим состоянием. Вы можете воспользоваться этим свойством, обрабатывая как можно больше изменений конфигурации, чтобы минимизировать количество пересозданий WebView . Ваше приложение должно обрабатывать изменения конфигурации, поскольку пересоздание активности (системный способ обработки изменений конфигурации) приводит к пересозданию WebView , что, в свою очередь, приводит к потере состояния WebView .
Результаты
Компоненты WebView вашего приложения сохраняют свое состояние и положение прокрутки при многочисленных изменениях конфигурации, от изменения размера и ориентации до сворачивания и разворачивания на устройстве.
Совместимость версий
Данная реализация совместима со всеми уровнями API.
Зависимости
Никто.
Управление состоянием
По возможности избегайте повторного создания активности во время изменения конфигурации и позвольте WebView стать недействительным, чтобы он мог изменить размер, сохраняя при этом свое состояние.
Для управления состоянием WebView :
- Объявите об изменениях конфигурации, обрабатываемых вашим приложением.
- Сбросить состояние
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 , если он не управляется должным образом.
Ключевые моменты
-
android:configChanges: Атрибут элемента<activity>манифеста. Отображает изменения конфигурации, обрабатываемые активностью. -
View#invalidate(): Метод, вызывающий перерисовку представления. Наследуется классомWebView.
Коллекции, содержащие это руководство
Данное руководство является частью подборки кратких руководств, охватывающих более широкие цели разработки под Android:
