WebView
— это широко используемый компонент, предлагающий расширенную систему управления состоянием. WebView
должен сохранять своё состояние и позицию прокрутки при изменении конфигурации. WebView
может потерять позицию прокрутки, когда пользователь поворачивает устройство или раскладывает складной телефон, что заставляет пользователя снова прокручивать WebView
от верхней части к предыдущей позиции прокрутки.
WebView
хорошо справляется с управлением своим состоянием. Вы можете воспользоваться этим преимуществом, управляя как можно большим количеством изменений конфигурации, чтобы минимизировать количество пересозданий WebView
. Ваше приложение должно обрабатывать изменения конфигурации, поскольку пересоздание активности (способ обработки изменений конфигурации системой) приводит к пересозданию WebView
, что приводит к потере WebView
состояния.
Результаты
Компоненты WebView
вашего приложения сохраняют свое состояние и положение прокрутки при многочисленных изменениях конфигурации: от изменения размера и ориентации до сворачивания и разворачивания устройства.
Управление состоянием
По возможности избегайте повторного запуска активности во время изменения конфигурации и позвольте 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() }
Ява
@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); webview.invalidate(); }
Этот шаг применим только к системе представлений, поскольку Jetpack Compose не требует инвалидации каких-либо элементов для корректного изменения размера Composable
элементов. Однако Compose часто пересоздаёт WebView
, если управление им некорректно.
Ключевые моменты
-
android:configChanges
: атрибут элемента манифеста<activity>
. Содержит список изменений конфигурации, обработанных действием. -
View#invalidate()
: Метод, вызывающий перерисовку представления. УнаследованоWebView
.
Коллекции, содержащие это руководство
Это руководство является частью тщательно подобранной коллекции кратких руководств, охватывающих более широкие цели разработки Android:

Оптимизировать для больших экранов
Есть вопросы или отзывы
WebView
— это широко используемый компонент, предлагающий расширенную систему управления состоянием. WebView
должен сохранять своё состояние и позицию прокрутки при изменении конфигурации. WebView
может потерять позицию прокрутки, когда пользователь поворачивает устройство или раскладывает складной телефон, что заставляет пользователя снова прокручивать WebView
от верхней части к предыдущей позиции прокрутки.
WebView
хорошо справляется с управлением своим состоянием. Вы можете воспользоваться этим преимуществом, управляя как можно большим количеством изменений конфигурации, чтобы минимизировать количество пересозданий WebView
. Ваше приложение должно обрабатывать изменения конфигурации, поскольку пересоздание активности (способ обработки изменений конфигурации системой) приводит к пересозданию WebView
, что приводит к потере WebView
состояния.
Результаты
Компоненты WebView
вашего приложения сохраняют свое состояние и положение прокрутки при многочисленных изменениях конфигурации: от изменения размера и ориентации до сворачивания и разворачивания устройства.
Управление состоянием
По возможности избегайте повторного запуска активности во время изменения конфигурации и позвольте 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() }
Ява
@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); webview.invalidate(); }
Этот шаг применим только к системе представлений, поскольку Jetpack Compose не требует инвалидации каких-либо элементов для корректного изменения размера Composable
элементов. Однако Compose часто пересоздаёт WebView
, если управление им некорректно.
Ключевые моменты
-
android:configChanges
: атрибут элемента манифеста<activity>
. Содержит список изменений конфигурации, обработанных действием. -
View#invalidate()
: Метод, вызывающий перерисовку представления. УнаследованоWebView
.
Коллекции, содержащие это руководство
Это руководство является частью тщательно подобранной коллекции кратких руководств, охватывающих более широкие цели разработки Android:
