美文网首页Android开发android技术专栏
AlertDialog中使用WebView显示内容

AlertDialog中使用WebView显示内容

作者: VanGiao | 来源:发表于2017-03-31 10:50 被阅读3112次

    在最近的开发中,需要用到在AlertDialog中通过WebView显示内容,但是在实际操作过程中,发现有一个小小的问题需要注意一下,在此也记录一下。
    首先放出代码:

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

    上面这段代码,看似是没问题的,但是在实际显示过程中,WebView一直都是空白页面,啥也没有。开始排查问题:

    网络问题

    一开始以为是网络问题,于是将http://www.baidu.com换成本地的assets中的文件,更换后关键代码如下:

      webView.loadUrl("file:///android_asset/test.html");
    

    更换为本地文件之后,WebView中显示的依然是空白页面,啥也没有。继续排查

    文件问题

    是否是这个HTML的文件有问题,如果直接加载HTML字符串,问题能否结局,继续修改关键代码如下:

    webView.loadData("<html>这是一段HTML的代码</html>","text/html", "utf-8");
    //或者也可以这样
    webView.loadDataWithBaseURL(null, "<html>这是一段html代码</html>", "text/html", "utf-8", null);
    

    更改成直接加载HTML字符串之后,WebView还是现实空白页面,啥也没有。最后想来想去,是不是因为我们将WebView放在了AlertDialog中,所以导致我们的WebView显示有问题。于是我们将WebView单独移出来,结果发现可以显示出正确的内容。那也就是说这个问题出在AlertDialog身上了,难道WebView不能放在AlertDialog中吗。显然不是的,于是参考了官方教程之后,终于发现了问题所在。

    震惊!导致WebView显示空白的罪魁祸首竟然是……

    先直接贴出可以运行的正确代码:

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

    问题就出在这个setView身上,我们的"错误代码"是先setView,然后再使用webview进行load,但是正确的顺序应该是先使用webview进行load,然后再setView。
    问题到此排查结束。

    相关文章

      网友评论

        本文标题:AlertDialog中使用WebView显示内容

        本文链接:https://www.haomeiwen.com/subject/njimottx.html