Проблема перерисовки WebView при загрузке данных - PullRequest
12 голосов
/ 05 августа 2011

Я сталкиваюсь с проблемой отображения веб-просмотра, который я использую в одном из моих приложений.

Когда я вызываю loadData, веб-просмотр сначала отображает текст, а затем загружает изображения страницы (стандартное поведение).

Иногда, если эти изображения изменяют текстовую позицию, старая текстовая позиция не очищается и отображается как старый текст, так и новый текст + изображение

Вот снимок экрана, на котором это выглядит, когдавозникает проблема:

webview redraw problem

Это похоже на то, что веб-представление неправильно перерисовывает содержимое.Конечно, простой invalidate () не работает ...

Это происходит не часто, но, скажем, один раз за 20.

Код, используемый для отображения данных (называемый вне жизненного цикла Activity)методы):

// Include the html headers to the content received from WS
String webtext = String.format(ConfigApp.HTML_BODY, wsdata.getText());
mWebView.setWebChromeClient(...);
mWebView.setWebViewClient(...);
mWebView.setBackgroundColor(0);
mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null);

Есть идеи, как это исправить?

Ответы [ 5 ]

7 голосов
/ 23 августа 2011

Я наконец нашел способ решить проблему.

Удалить прозрачный фон WebView:

String webtext = String.format(ConfigApp.HTML_BODY, wsdata.getText());
mWebView.setWebChromeClient(...);
mWebView.setWebViewClient(...);
// mWebView.setBackgroundColor(0);
mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null);

Поскольку у моего WebView пустой фон, это нормально для меня. Может быть, это может раздражать кого-то еще.

Конечно, это ошибка WebView.

1 голос
/ 25 августа 2011

У меня часто возникали спорадические проблемы с неправильным отображением WebView после загрузки контента с помощью loadDataWithBaseUrl.Хотя высота WebView была установлена ​​равной wrap_content, WebView не всегда изменяет размер, чтобы обернуть содержимое.Вместо этого веб-просмотр имел высоту ноль.Иногда это будет отображаться нормально, а иногда - нет.Иногда проблема возникает только в портретной ориентации, и пейзаж будет работать нормально.Я попытался удалить мой вызов setBackgroundColor, но это не помогло.Однако сегодня я смог устранить проблему, изменив компоновку WebView с LinearLayout на RelativeLayout.

1 голос
/ 22 августа 2011

Если вы установите WebView на определенный размер, а не "wrap_content", то после загрузки данных веб-просмотр не будет корректно изменять размер своего контента.

Я думаю, что это ошибка с виджетом ..

Так ..
Попробуйте использовать "wrap_content" в атрибуте layout_height.

0 голосов
/ 05 мая 2013

Вам просто нужно вызвать refreshDrawableState () метод после вызова loadDataWithBaseURL () метод и это решит вашу проблему

mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null);
mWebView.refreshDrawableState();
0 голосов
/ 09 апреля 2013

Попробуйте

mWebView.setBackgroundColor(0x00ff0000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...