Предотвращение нежелательного мерцания из-за врожденного поведения WebView - PullRequest
3 голосов
/ 19 декабря 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

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

if (_webView.getScrollY() + _webView.getHeight() > _webView.getContentHeight())
    _webView.scrollTo(0, _webView.getContentHeight() - _webView.getHeight());
0 голосов
/ 19 января 2012

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

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

...