2009-07-06 24 views
5

Để đơn giản: Tôi muốn đánh dấu vị trí hiện tại (có thể là một số vị trí) trong tệp html được hiển thị trong một WebView để sau này khôi phục nó. Bất kỳ gợi ý nhỏ sẽ giúp đỡ. :)Nhận vị trí tài liệu trong một WebView?

Trả lời

6

Nếu theo "vị trí hiện tại" bạn có nghĩa là một điểm nào đó trong một trang nhất định, tôi không tin rằng điều đó là có thể ... ít nhất không hoàn toàn từ Java. Toàn bộ WebKit API tiếp xúc với Java thiếu nhiều thứ liên quan đến nội dung của các trang.

Nếu bạn có quyền kiểm soát nội dung trang, và có một cách để biết các vị trí thông qua trong trang Javascript, bạn có thể:

BướC# 1: Sử dụng WebView#addJavascriptInterface() để thêm một đối tượng với một số loại recordPosition() phương pháp , lưu thông tin ở bất cứ đâu thích hợp

BướC# 2: Tạo hàm Javascript gọi recordPosition() trên đối tượng được tiêm.

và sau đó một trong hai:

BướC# 3a: Trigger rằng Javascript hàm từ Javascript chính nó (ví dụ, dựa trên một nhấp chuột), hoặc

BướC# 3b: Gọi loadUrl("javascript:..."); trên WebView của bạn, nơi ... là được thay thế bằng mã Javascript để kích hoạt chức năng Javascript từ bướC# 2.

Khôi phục các vị trí này sẽ phải hoạt động theo cùng một cách: có Javascript thực hiện khôi phục thực tế, có thể được kích hoạt bởi mã Java.

Lưu ý rằng tôi không biết nếu bạn muốn (có được/thiết lập vị trí hiện tại) có sẵn từ Javascript, vì tôi không có nhiều bộ mã hóa trong trình duyệt.

+0

Câu trả lời tuyệt vời! Cảm ơn rất nhiều. Câu hỏi liên quan: http://stackoverflow.com/questions/1091048/alternatives-to-window-scrollmaxy – yanchenko

6

Cách tiếp cận tôi đã là như sau:

Trong phương pháp onSaveInstanceState(), tính toán thế nào đến nay xuống trang người dùng đã cuộn.

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

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

Stash rằng trong gói. Khi khôi phục trang trong phương pháp onCreate(), chờ trang để hoàn thành tải (trong WebClient.onPageFinished()), di chuyển đến vị trí ghi lại:

int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent); 
    webView.scrollTo(0, y); 
  • Sử dụng một float và tính toán một tỷ lệ làm việc trong trường hợp lật giữa cảnh quan và chân dung.
  • Có thể hoạt động cũng đủ nhưng không phải hoàn toàn khi được trộn lẫn với hình ảnh tự động.
  • Quy mô cũng có thể được tính đến. Tôi có xu hướng ngăn chặn tỷ lệ trong tùy chọn theo phương pháp onPause() và sau đó webView.setInitialScale(scale) trước khi bạn bắt đầu tải trang.
  • Tôi nhận thấy rằng việc đặt chế độ xem web thành ẩn khi scrollPercent > 0 trông đẹp hơn.
+0

Hoạt động tốt.Và tôi xác nhận rằng quy mô cần được tính đến. Cảm ơn. –

+0

@jamesh scrollRatio là gì? – 135

+0

@ 135 Great spot! - Tôi đã đổi nó thành scrollPercent. – jamesh

Các vấn đề liên quan