2011-08-05 88 views
12

我遇到一個使用我的應用程序中使用的webview顯示的問題。加載數據時WebView重繪問題

當我調用loadData時,webview首先顯示文本,然後加載頁面的圖像(標準行爲)。

有時候,如果這些圖像修改文本位置,舊文本位置不被清除,既舊文本,新文本+圖像顯示

這裏是什麼樣子出現問題時,就像一個截圖:

webview redraw problem

這就像webview不能正確重畫它的內容。當然,一個簡單的無效()不工作...

它做不經常發生,但可以說,一次在20

代碼用於顯示數據(被稱爲外活動的生命週期方法):

// 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); 

任何想法如何解決這個問題?

+0

在沒有看到'html'後你試圖加載的數據,我們無法幫助解決這個問題(因爲它可能是你的'html',而不是'Android'。 – Phil

+0

我不能來自HTML。它在手機上顯示正確的大部分時間,在Firefox上沒有問題。這似乎是一個刷新/重繪問題。 –

回答

7

我終於找到了解決問題的方法。

取出的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

所以我應該怎麼做,如果我需要透明的webview ... :( –

+0

不幸的是,沒有想法。這個特殊問題的android bug跟蹤器沒有問題。也許你應該填寫一個。 –

+0

@Roman Truba:我有同樣的問題,我需要我的webview透明顯示與我的父Viewgroup背景相同的顏色。幸運的是,這個父背景只有一種顏色,所以我使用這種顏色爲我的webview背景,它修復了這個bug – VinceFR

1

如果您將WebView設置爲特定尺寸而不是"wrap_content",那麼在加載數據之後,webview不會正確調整其內容的大小。

我認爲這是與小部件的錯誤..

所以..
嘗試在layout_height屬性使用"wrap_content"

+0

我的Webview已經在wrap_content中。 –

1

我經常有零星的問題,加載與loadDataWithBaseUrl內容後,WebViews無法正確顯示。雖然WebView的高度設置爲wrap_content,但WebView不會總是調整大小以包裝內容。相反,webview的高度爲零。有時它會顯示正常,而其他時間顯示不正常。有時候這個問題只會出現在縱向方向上,並且景觀效果會很好。我試圖刪除我的setBackgroundColor調用,但它沒有幫助。但是,通過將WebView所處的佈局從LinearLayout更改爲RelativeLayout,我能夠讓問題今天消失。

+0

感謝您分享您的經驗。我將在下次面對WebView問題時解決您的問題。 –

0

嘗試

mWebView.setBackgroundColor(0x00ff0000); 
+0

嗨,歡迎來到Stackoverflow!請閱讀[如何回答問題指南](http://stackoverflow.com/questions/how-to-answer)。本網站是問答網站,不是論壇。你能否添加一些更多的細節? – slm

0

你只需要調用refreshDrawableState()方法調用loadDataWithBaseURL()方法 其能夠解決您的問題

mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null); 
mWebView.refreshDrawableState();