2009-07-06 17 views

Respuesta

6

Si por "la posición actual" te refieres a un punto en alguna página determinada, no creo que eso sea posible ... al menos no solo de Java. Toda la API de WebKit expuesta a Java carece de cualquier cosa que se ocupe del contenido de las páginas.

Si usted tiene control sobre el contenido de la página, y no hay una manera de saber estas posiciones a través de páginas en Javascript, usted podría:

Paso # 1: Uso WebView#addJavascriptInterface() añadir un objeto con algún tipo de recordPosition() método , guardando la información donde sea apropiado

Paso # 2: Crea una función de Javascript que llame al recordPosition() en el objeto inyectado.

y luego o bien:

Paso 3a: Disparo que la función Javascript de sí misma Javascript (por ejemplo, sobre la base de un clic), o

Paso 3b: A petición loadUrl("javascript:..."); en su WebView, donde ... es reemplazado por código Javascript para activar la función Javascript desde el paso # 2.

Restaurar estas posiciones tendría que funcionar de la misma manera: tener Javascript hacer las restauraciones reales, posiblemente desencadenadas por código Java.

Tenga en cuenta que no tengo idea de si lo que desea (obtener/establecer la posición actual) está disponible desde Javascript, ya que no soy mucho de un codificador en el navegador.

+0

¡Respuesta asombrosa! Muchas gracias. Pregunta relacionada: http://stackoverflow.com/questions/1091048/alternatives-to-window-scrollmaxy – yanchenko

6

El enfoque que tomé fue la siguiente:

En el método onSaveInstanceState(), calcular a qué distancia de la página que el usuario había desplazado.

int contentHeight = webView.getContentHeight(); 
    int scrollY = webView.getScrollY(); 

    float scrollPercent = ((float) scrollY/((float) contentHeight)); 

Stash that in the bundle. Cuando se restaura la página en el método onCreate(), esperar a que la página termine de cargarse (en WebClient.onPageFinished()), desplazarse hasta la posición registrada:

int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent); 
    webView.scrollTo(0, y); 
  • El uso de un float y calcular una relación funciona en el caso de hacer zapping entre los paisaje y retrato.
  • Puede trabajar suficientemente bien pero no perfectamente cuando se combina con el aumento de tamaño de las imágenes.
  • La escala también se puede tener en cuenta. Tiendo a esconder la balanza en una preferencia en el método onPause(), y luego webView.setInitialScale(scale) antes de comenzar a cargar la página.
  • He encontrado que establecer la vista web a invisible cuando scrollPercent > 0 se ve mejor.
+0

Funciona bien.Y confirmo que la escala debe tenerse en cuenta. Gracias. –

+0

@jamesh ¿Qué es scrollRatio? – 135

+0

@ 135 ¡Excelente lugar! - Lo cambié a scrollPercent. – jamesh

Cuestiones relacionadas