Restaurar la posición de WebView al mismo contenido en el cambio de orientación (Android)
Estoy frente a un problema con la posición de desplazamiento de contenido de WebView
y aquí es: estoy bajando la página hasta cierto punto en el modo de retrato y cuando cambio la orientación al paisaje el desplazamiento se mueve hacia arriba o hacia abajo. No muestra el contenido exacto que está allí en modo retrato. configChanges="keyboardHidden|orientation|screenSize"
hacer cambios en el archivo del manifiesto como configChanges="keyboardHidden|orientation|screenSize"
pero ninguna suerte. Hice anular onConfigurationChanged()
pero eso no funcionó. He implementado la respuesta aceptada en esta pregunta, pero de ninguna utilidad. ¿Puede alguien sugerir lo que hay que hacer y por qué no funciona? Esto es para la pestaña Nexus de Google y la versión mínima requerida para SDK es 14. Gracias a todos.
- Android JS en WebView.loadUrl ()
- Carga de archivos de Android WebView
- Android - WebView dentro de ScrollView dejar espacio en blanco en la parte inferior
- Enviar solicitud de envío junto con HttpHeaders en Android
- Obtiene la última URL cargada de webview sin hacer un webView.goBack () en Android
- Android WebView: Eliminar opción de pop-out en Google Drive / Visor de documentos
- La vista web de Android no reproduce el video mp4 en la misma página
- Android WebView TimeOut
- ¿Por qué CordovaWebViewClient no funciona en Cordova 6 más
- Rellenar formulario en WebView con Javascript
- Cómo guardar credenciales en Android / jQuery Mobile App
- Obtener la altura del texto incluyendo el tamaño de fuente y establecer esa altura
- ¿Puedo introducir código JavaScript en las pestañas personalizadas de Chrome?
Recuerdo haber enfrentado el mismo problema con mi aplicación. Si no me equivoco, la solución sugerida por Phil no funciona (en algunas versiones de Android?).
Estoy usando el siguiente enfoque ahora:
- En onSaveInstanceState guardar la posición de desplazamiento actual de la WebView:
outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
-
En onCreate, obtenga la última posición de desplazamiento de savedInstanceState y configure un WebViewClient personalizado:
setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (!scrolled) { postDelayed(new Runnable() { @Override public void run() { scrollBy(0, scroll); } }, 250); scrolled = true; } } });
Esto es feo como el infierno, pero funciona un poco para mí (esto no tiene en cuenta el nivel de zoom actual, etc). Hay mucho sobre ese código que podría mejorar, pero básicamente hace el truco.
Las clases de vista tienen un método onSaveInstanceState()
que devuelve un método Parcelable
y un onRestoreInstanceState(Parcelable state)
para restaurar el estado. Si recuerdo correctamente, el estado guardado incluye la posición de desplazamiento. Todo lo que necesitas hacer es guardar el Parcelable que obtienes de una llamada a la función onSaveInstanceState()
WebView en el método onSaveInstanceState
tu fragmento:
public void onSaveInstanceState(Bundle savedState) { super.onSaveInstanceState(savedState); WebView webView = (WebView) findViewById( ... ); savedState.putParcelable("myKey", webView.onSaveInstanceState()); }
A continuación, en su método onCreateView
restaura ese estado, si está disponible:
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... if (savedInstanceState != null) { WebView webView = (WebView) findViewById( ... ); Parcelable savedState = savedInstanceState.getParcelable("myKey"); if (savedState != null) { webView.onRestoreInstanceState(savedState); } } .... }
Trate de hacer uso de onSaveInstanceState para guardar el estado de scrollview y restaurar en el método onRestoreInstanceState . ¿Has utilizado u xml Scrollview thr ?, si es así obtener referencia a esa vista y cuando la actividad de restauración, a continuación, establecer la posición de scrollview a la state.Hope guardado esto ayuda.
- Uso de NDK con STL en Android Studio gradle project
- AndEngine con los servicios de juegos de Google Play