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 porWebView
.
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:
