在最近的開發(fā)中辐啄,需要用到在AlertDialog中通過WebView顯示內(nèi)容,但是在實(shí)際操作過程中蹂喻,發(fā)現(xiàn)有一個(gè)小小的問題需要注意一下氨肌,在此也記錄一下。
首先放出代碼:
AlertDialog.Builder builder = new Builder(this)
.setView(R.layout.new_dialog_user_guide);
View view = getLayoutInflater().inflate(R.layout.new_dialog_user_guide, null);
WebView webView = (WebView) view.findViewById(R.id.web_user_guide);
webView.loadUrl("http://www.baidu.com");
builder.show();
上面這段代碼廓鞠,看似是沒問題的帚稠,但是在實(shí)際顯示過程中,WebView一直都是空白頁面床佳,啥也沒有滋早。開始排查問題:
網(wǎng)絡(luò)問題
一開始以為是網(wǎng)絡(luò)問題,于是將http://www.baidu.com
換成本地的assets中的文件砌们,更換后關(guān)鍵代碼如下:
webView.loadUrl("file:///android_asset/test.html");
更換為本地文件之后馆衔,WebView中顯示的依然是空白頁面,啥也沒有怨绣。繼續(xù)排查
文件問題
是否是這個(gè)HTML的文件有問題角溃,如果直接加載HTML字符串,問題能否結(jié)局篮撑,繼續(xù)修改關(guān)鍵代碼如下:
webView.loadData("<html>這是一段HTML的代碼</html>","text/html", "utf-8");
//或者也可以這樣
webView.loadDataWithBaseURL(null, "<html>這是一段html代碼</html>", "text/html", "utf-8", null);
更改成直接加載HTML字符串之后减细,WebView還是現(xiàn)實(shí)空白頁面,啥也沒有赢笨。最后想來想去未蝌,是不是因?yàn)槲覀儗ebView放在了AlertDialog中,所以導(dǎo)致我們的WebView顯示有問題茧妒。于是我們將WebView單獨(dú)移出來萧吠,結(jié)果發(fā)現(xiàn)可以顯示出正確的內(nèi)容。那也就是說這個(gè)問題出在AlertDialog身上了桐筏,難道WebView不能放在AlertDialog中嗎纸型。顯然不是的,于是參考了官方教程之后梅忌,終于發(fā)現(xiàn)了問題所在狰腌。
震驚!導(dǎo)致WebView顯示空白的罪魁禍?zhǔn)拙谷皇恰?/h4>
先直接貼出可以運(yùn)行的正確代碼:
AlertDialog.Builder builder = new Builder(this);
View view = getLayoutInflater().inflate(R.layout.new_dialog_user_guide, null);
WebView webView = (WebView) view.findViewById(R.id.web_user_guide);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
builder.setView(view);
builder.setPositiveButton(R.string.confirm, null);
builder.show();
問題就出在這個(gè)setView
身上牧氮,我們的"錯(cuò)誤代碼"是先setView琼腔,然后再使用webview進(jìn)行l(wèi)oad,但是正確的順序應(yīng)該是先使用webview進(jìn)行l(wèi)oad踱葛,然后再setView丹莲。
問題到此排查結(jié)束光坝。