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.

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:

  1. En onSaveInstanceState guardar la posición de desplazamiento actual de la WebView: outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
  2. 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.

  • Android: Cómo hacer que un botón sea visible una vez que se haya completado la visualización web
  • Android: agregar una imagen en html webview
  • ¿Puedo abrir la cámara en la vista web?
  • ¿Cómo evitar que una vista de desplazamiento se desplace a una vista web después de cargar los datos?
  • M_mainFrame-> editor () -> hasComposition no emitir
  • WebView onPageFinished se está llamando cuando el error Página no disponible. ¿Solución?
  • Listview con webview
  • WebView muestra el código fuente html con loadDataWithBaseURL, no visualizado
  • Métodos de WebView en el mismo error de hilo
  • ¿Qué hace stopLoading () realmente hacer?
  • Deshabilitar clic largo en la vista web de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.