Cómo administrar el estado de WebView

WebView es un componente de uso general que ofrece un sistema avanzado para la administración de estados. Una WebView debe mantener su estado y posición de desplazamiento en todos los cambios de configuración. Un objeto WebView puede perder la posición de desplazamiento cuando el usuario rota el dispositivo o despliega un teléfono plegable, lo que lo obliga a desplazarse nuevamente desde la parte superior del objeto WebView hasta la posición de desplazamiento anterior.

WebView administra bien su estado. Puedes aprovechar esta cualidad administrando tantos cambios de configuración como sea posible para minimizar la cantidad de veces que se vuelve a crear un WebView. Tu app debe controlar los cambios de configuración porque la recreación de actividades (la forma en que el sistema maneja los cambios de configuración) recrea el WebView, lo que hace que el WebView pierda su estado.

Resultados

Los componentes WebView de tu app retienen su estado y posición de desplazamiento en varios cambios de configuración, desde el cambio de tamaño hasta los cambios de orientación, el plegado y el desplegado del dispositivo.

Administrará el estado

Evita la recreación de actividades tanto como sea posible durante los cambios de configuración y deja que se invalide WebView para que pueda cambiar de tamaño y retener su estado.

Para administrar el estado de WebView, haz lo siguiente:

  • Declara los cambios de configuración que controla tu app
  • Invalida el estado WebView

1. Agrega cambios de configuración al archivo AndroidManifest.xml de tu app

Para evitar la recreación de actividades, especifica los cambios de configuración que maneja tu app (en lugar del sistema):

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. Invalida WebView cada vez que tu app recibe un cambio de configuración

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

Este paso se aplica solo al sistema de vistas, ya que Jetpack Compose no necesita invalidar nada para cambiar el tamaño de los elementos Composable correctamente. Sin embargo, Compose vuelve a crear una WebView con frecuencia si no se administra correctamente.

Puntos clave

  • android:configChanges: Es el atributo del elemento <activity> del manifiesto. Enumera los cambios de configuración que controla la actividad.
  • View#invalidate(): Es el método que vuelve a dibujar una vista. Heredado por WebView.

Colecciones que contienen esta guía

Esta guía forma parte de las colecciones seleccionadas de Guías rápidas que abarcan objetivos más amplios de desarrollo para Android:

Habilita tu app para que admita una experiencia del usuario optimizada en tablets, dispositivos plegables y dispositivos ChromeOS.

Preguntas o comentarios

Visita nuestra página de preguntas frecuentes y consulta las guías rápidas, o bien comunícate con nosotros para contarnos tu opinión.