2009-07-06 6 views

risposta

6

Se per "la posizione corrente" si intende un punto da qualche parte in una determinata pagina, non credo sia possibile ... almeno non puramente da Java. L'intera API WebKit esposta a Java è priva di tutto ciò che riguarda il contenuto delle pagine.

Se si ha il controllo sul contenuto della pagina, e c'è un modo per sapere queste posizioni tramite in-page Javascript, si potrebbe:

Passo # 1: Utilizzare WebView#addJavascriptInterface() per aggiungere un oggetto con una sorta di recordPosition() metodo , salvataggio delle informazioni dovunque sia appropriato

Passaggio 2: creare una funzione Javascript che chiami recordPosition() sull'oggetto iniettato.

e quindi:

Passo # 3 bis: trigger che la funzione Javascript da Javascript stesso (ad esempio, sulla base di uno scatto), o

Passo 3b: Chiamare loadUrl("javascript:..."); sul WebView, dove ... è sostituito dal codice Javascript per attivare la funzione Javascript dal punto 2.

Il ripristino di queste posizioni dovrebbe funzionare allo stesso modo: fare eseguire JavaScript i ripristini effettivi, eventualmente attivati ​​dal codice Java.

Si noti che non ho idea se ciò che si desidera (ottenere/impostare la posizione corrente) sia disponibile da Javascript, poiché non sono un programmatore per browser.

+0

Sorprendente risposta! Molte grazie. Domanda correlata: http://stackoverflow.com/questions/1091048/alternatives-to-window-scrollmaxy – yanchenko

6

L'approccio che ho preso è stato il seguente:

Nel metodo onSaveInstanceState(), calcolare quanto in basso nella pagina l'utente aveva fatto scorrere.

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

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

Mettere da parte nel pacchetto. Quando si ripristina la pagina nel metodo di onCreate(), attendere che la pagina termini il caricamento (in WebClient.onPageFinished()), scorrere fino alla posizione registrata:

int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent); 
    webView.scrollTo(0, y); 
  • Utilizzando un float e calcolando un rapporto funziona nel caso di lanciare tra paesaggio e ritratto.
  • Può funzionare in modo corretto ma non perfettamente se miscelato con l'autorizzazione di immagini.
  • La scala può anche essere presa in considerazione. Tendo a memorizzare la scala in una preferenza nel metodo onPause() e quindi a webView.setInitialScale(scale) prima di iniziare a caricare la pagina.
  • Ho trovato che l'impostazione della visualizzazione Web invisibile quando scrollPercent > 0 sembra migliore.
+0

Funziona bene.E confermo che la scala dovrebbe essere presa in considerazione. Grazie. –

+0

@jamesh Che cos'è scrollRatio? – 135

+0

@ 135 Ottimo posto! - L'ho cambiato in scrollPercent. – jamesh

Problemi correlati