Pregunta

Para decirlo simple: Quiero un marcador en la posición actual (probablemente varias posiciones) en un archivo html muestran en una vista Web para más tarde restaurarlo. Cualquier pequeña pista ayudaría. :)

¿Fue útil?

Solución

Si por "la posición actual" que significa un punto en alguna parte en una página determinada, no creo que eso es posible ... al menos no sólo a partir de Java. Todo el API de WebKit expuesta a Java carece mucho de cualquier cosa que se ocupa 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: Utilice WebView#addJavascriptInterface() añadir un objeto con algún tipo de método recordPosition(), guardar la información donde sea apropiado

Paso # 2:. Crear una función de JavaScript que llama recordPosition() en el objeto inyectado

y luego o bien:

Paso # 3a: disparador que la función Javascript de sí misma Javascript (por ejemplo, basado en un clic), o

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

.

La restauración de estas posiciones tendría que trabajar de la misma manera: tiene Javascript hacer las restauraciones reales, posiblemente provocada por el código de Java

.

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

Otros consejos

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 que en el haz. Cuando se restaura la página en el método onCreate(), espere que la página termine de cargar (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 mover de un tirón entre el paisaje y el retrato.
  • Puede trabajar lo suficientemente bien pero no perfectamente cuando se mezcla con el tamaño automáticamente las imágenes.
  • Escala también puede tenerse en cuenta. Me tienden a esconder la escala de preferencia en el método onPause(), y luego webView.setInitialScale(scale) antes de empezar a cargar la página.
  • He encontrado que la fijación de la vista web a scrollPercent > 0 invisible cuando se ve mejor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top