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

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:

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

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

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