2009-07-06 13 views

Odpowiedz

6

Jeśli przez "aktualną pozycję" rozumiesz punkt gdzieś na danej stronie, nie wierzę, że jest to możliwe ... przynajmniej nie tylko z Javy. Cały interfejs WebKit API, na który narażony jest Java, pozbawiony jest wielu elementów związanych z zawartością stron.

Jeśli masz kontrolę nad zawartością strony i istnieje sposób znać te pozycje za pośrednictwem in-page JavaScript, można:

Krok 1: Użyj WebView#addJavascriptInterface() aby dodać obiekt z jakimś recordPosition() metody , zapisywanie informacji w razie potrzeby

Krok # 2: Utwórz funkcję JavaScript, która wywołuje recordPosition() na wstrzykniętym obiekcie.

a następnie:

Krok 3a: Wyzwalanie że funkcja Javascript od samego JavaScript (np na podstawie jednego kliknięcia) lub

Krok 3b: Call loadUrl("javascript:..."); na swojej WebView, gdzie ... jest zastąpiony przez kod Javascript, aby uruchomić funkcję JavaScript z kroku 2.

Przywracanie tych pozycji musiałoby działać w bardzo podobny sposób: wystarczy JavaScript do faktycznego przywracania, prawdopodobnie wywołanego przez kod Java.

Zauważ, że nie mam pojęcia, czy to, co chcesz (uzyskać/ustawić aktualną pozycję) jest dostępne z Javascript, ponieważ nie jestem zbyt dobrym programistą w przeglądarce.

+0

Niesamowita odpowiedź! Wielkie dzięki. Powiązane pytanie: http://stackoverflow.com/questions/1091048/alternatives-to-window-scrollmaxy – yanchenko

6

Podejście wziąłem się następująco:

W metodzie onSaveInstanceState(), obliczyć, jak daleko w dół strony użytkownik nie przewijane.

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

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

Ukryj to w pakiecie. Podczas przywracania stronę w metodzie onCreate(), poczekaj na stronę, aby zakończyć ładowanie (w WebClient.onPageFinished()), przewiń do nagranej pozycji:

int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent); 
    webView.scrollTo(0, y); 
  • Korzystanie z float i obliczania wskaźnika działa w przypadku przerzucanie między krajobraz i portret.
  • Może pracować wystarczająco dobrze, ale nie idealnie po zmieszaniu z autorezjowaniem obrazów.
  • Skala może być również brana pod uwagę. Mam tendencję do przechowania skali w preferencji w metodzie onPause(), a następnie webView.setInitialScale(scale) przed rozpoczęciem ładowania strony.
  • Znalazłem, że ustawienie widoku WWW na niewidoczny, gdy scrollPercent > 0 wygląda lepiej.
+0

Działa ładnie.Potwierdzam, że należy wziąć pod uwagę skalę. Dzięki. –

+0

@jamesh Co to jest scrollRatio? – 135

+0

@ 135 Świetne miejsce! - Zmieniłem go na scrollPercent. – jamesh

Powiązane problemy