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

Значок трехзвездочного рейтинга

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 вашего приложения теперь сохраняют свое состояние и положение прокрутки при различных изменениях конфигурации, от изменения размера и ориентации до сворачивания и разворачивания.

Дополнительные ресурсы

Чтобы узнать больше об изменениях конфигурации и способах управления ими, см. раздел «Обработка изменений конфигурации» .