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 de la WebView hasta la posición de desplazamiento anterior.
Prácticas recomendadas
Minimiza la cantidad de veces que se vuelve a crear un objeto WebView. WebView administra bien su estado y puedes aprovechar esta calidad administrando tantos cambios de configuración como sea posible. Tu app debe controlar los cambios de configuración porque la recreación de Activity (la forma en que el sistema maneja los cambios de configuración) también recrea la WebView, lo que hace que WebView pierda su estado.
Ingredientes
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.WebViewlo hereda.
Pasos
Para guardar el estado WebView, evita la recreación de Activity tanto como sea
posible y, luego, deja que WebView se invalide para que pueda cambiar de tamaño y
retener su estado.
1. Agrega cambios de configuración a AndroidManifest.xml
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 en los cambios 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 vista, ya que Jetpack Compose no necesita
invalidar nada para cambiar el tamaño de los Composable elementos correctamente. Sin embargo, Compose vuelve a crear una WebView con frecuencia si no se administra correctamente. Usa el
wrapper Accompanist WebView para guardar y restablecer el estado WebViewen tus apps de Compose.
Resultados
Los componentes WebView de tu app ahora retienen su estado y posición de desplazamiento en varios cambios de configuración, desde el cambio de tamaño hasta el cambio de orientación, el plegado y el desplegado.
Recursos adicionales
Para obtener más información sobre los cambios de configuración y cómo administrarlos, consulta Cómo administrar los cambios en la configuración.