Управление состоянием WebView

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:

Включите свое приложение для поддержки оптимизированного взаимодействия с пользователем на планшетах, складных устройствах и устройствах ChromeOS.

Есть вопросы или отзывы

Перейдите на нашу страницу часто задаваемых вопросов и узнайте о кратких руководствах или свяжитесь с нами и сообщите нам свои мысли.