Предотвращение нежелательного мерцания из-за врожденного поведения WebView

Я использую Android WebView, чтобы показать некоторый HTML-контент (точнее, String с HTML-тегами), созданный во время выполнения. Контент имеет в основном HTML <table ...>, показывающий различные вещи, и строки этой таблицы генерируются моей программой. Содержимое HTML загружается в мой WebView путем вызова метода loadDataWithBaseUrl().
Теперь каждый раз, когда я генерирую новую строку, я создаю новую <tr></tr> и изменяю строку HTML, чтобы добавить вновь созданную строку в таблицу. Очевидно, мне нужно вспомнить метод loadDataWithBaseUrl(), чтобы перезагрузить HTML и показать последнюю строку.

Здесь есть несколько проблем:
Во-первых) Каждый раз, когда вызывается loadDataWithBaseUrl(), WebView прокручивается вверх страницы Во-вторых) Я хочу прокручивать WebView после загрузки до конца страницы, чтобы всегда отображалась последняя сгенерированная строка.

Теперь собственно проблема:
Если я попытаюсь вызвать метод pageDown(true) WebView после завершения загрузки страницы, я получу неприятную анимацию, и пользователю придется ждать, пока WebView завершит прокрутку вниз. страницы.
Поскольку кажется, что нет никакого способа отключить это поведение прыжков вверх и вниз, я прибегнул к JavaScript и прокручиваю страницу до конца после загрузки страницы (вызывая функцию на window.onload)
Теперь у меня другая проблема! Тем не менее, есть мерцание, вызванное перезагрузкой WebView страницы, что приводит к прокрутке полностью вверх, а функция JavaScript сразу же прокручивает страницу вниз.

Я провел бесчисленное количество часов за последние несколько дней и до сих пор не нашел способ добиться желаемых результатов. Есть ли способ решить эту проблему? (Возможно, обходной путь/другая стратегия?) Виновником, очевидно, является врожденное поведение WebView, которое прокручивается вверх, когда он заканчивает загрузку страницы.


person Maghoumi    schedule 19.12.2011    source источник


Ответы (2)


Можете ли вы попробовать что-то вроде этого:

if (_webView.getScrollY() + _webView.getHeight() > _webView.getContentHeight())
    _webView.scrollTo(0, _webView.getContentHeight() - _webView.getHeight());
person Dany's    schedule 19.12.2011
comment
Уже попробовал... Мерцание! Если бы я только мог предотвратить автоматическую прокрутку WebView вверх ....... - person Maghoumi; 19.12.2011

Есть несколько тем, посвященных тому, как сделать прокрутку и перелистывание страниц удобными для электронных чернил:

http://github.com/aarddict/android/issues/28#issuecomment-3512595 http://www.mobileread.com/forums/showthread.php?p=1929476#post1929476

person bardo    schedule 19.01.2012