WebView
— это широко используемый компонент, предлагающий расширенную систему управления состоянием. WebView
должен сохранять свое состояние и положение прокрутки при изменении конфигурации. WebView
может потерять позицию прокрутки, когда пользователь поворачивает устройство или разворачивает складной телефон, что заставляет пользователя снова прокручивать от верхней части WebView
до предыдущей позиции прокрутки.
WebView
хорошо управляет своим состоянием. Вы можете воспользоваться этим качеством, управляя как можно большим количеством изменений конфигурации, чтобы минимизировать количество повторных созданий WebView
. Ваше приложение должно обрабатывать изменения конфигурации, поскольку воссоздание активности (способ обработки изменений конфигурации системой) воссоздает WebView
, что приводит к потере состояния WebView
.
Управление состоянием
По возможности избегайте воссоздания Activity
во время изменений конфигурации и позволяйте 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
.
Результаты
Компоненты WebView
вашего приложения теперь сохраняют свое состояние и положение прокрутки при многочисленных изменениях конфигурации: от изменения размера до изменения ориентации, а также складывания и раскладывания устройства.
Коллекции, содержащие это руководство
Это руководство является частью тщательно подобранной коллекции быстрых руководств, охватывающих более широкие цели разработки Android:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=ru)