Вопрос по android – Получение позиции документа в WebView?

5

Проще говоря: я хочу добавить в закладки текущую позицию (возможно, несколько позиций) в HTML-файл, отображаемый в WebView на более поздний восстановить это. Любой маленький намек поможет. :)

Ваш Ответ

2   ответа
6

вonSaveInstanceState() метод, рассчитать, как далеко вниз страницу прокрутил пользователь.

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

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

Спрятать это в связке. При восстановлении страницы вonCreate() метод, дождитесь окончания загрузки страницы (вWebClient.onPageFinished()), перейдите к записанной позиции:

    int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent);
    webView.scrollTo(0, y);
Using a float and calculating a ratio works in the case of flipping between landscape and portrait. May work well enough but not perfectly when mixed with autoresizing images. Scale may also be taken into account. I tend to stash the scale in a preference in the onPause() method, and then webView.setInitialScale(scale) before you start loading the page. I have found that setting the web view to invisible when scrollPercent > 0 looks better.
Работает красиво. И я подтверждаю, что масштаб должен быть принят во внимание. Благодарю.
@jamesh Что такое scrollRatio?
@ 135 Отличное место! & # X2014; Я изменил его на scrollPercent.
6

текущей позиции & quot; Вы имеете в виду точку где-то на данной странице, я не верю, что это возможно ... по крайней мере, не чисто из Java. Весь API-интерфейс WebKit, работающий с Java, лишен всего, что связано с содержимым страниц.

Если у вас есть контроль над содержимым страницы и есть способ узнать эти позиции с помощью встроенного в Javascript, вы можете:

Шаг № 1: ИспользуйтеWebView#addJavascriptInterface() добавить объект с каким-тоrecordPosition() метод сохранения информации там, где это уместно

Шаг № 2: Создайте функцию Javascript, которая вызываетrecordPosition() на введенный объект.

а затем либо:

Шаг № 3а: Запустите эту функцию Javascript из самого Javascript (например, на основе клика) или

Шаг № 3б: ПозвонитьloadUrl("javascript:..."); на вашеWebView, где... заменяется кодом Javascript для запуска функции Javascript с шага № 2.

Восстановление этих позиций должно работать примерно так же: пусть Javascript выполнит реальное восстановление, возможно, вызванное кодом Java.

Заметьте, что я понятия не имею, доступно ли то, что вы хотите (получить / установить текущую позицию) из Javascript, так как я не являюсь частью браузера в браузере.

Удивительный ответ! Большое спасибо. Связанный вопрос:stackoverflow.com/questions/1091048/… yanchenko

Похожие вопросы