如何在Android中使用Webview.loadUrl渲染时显示加载进度条?

26
使用Webview展示HTML页面时,在它完成渲染之前会有几秒钟的空白页面。为了更好的用户体验,有没有一种方法可以在这几秒钟内显示一个加载图片?

1
请查看此教程:Android - 使用ProgressBar加载WebView - Paresh Mayani
5个回答

29

试试这个

        ...... 
        webView.setWebChromeClient(new WebChromeClient() {
           public void onProgressChanged(WebView view, int progress) {
              activity.setTitle("Loading...");
              activity.setProgress(progress * 100);

              if(progress == 100)
                 activity.setTitle(R.string.app_name);
           }
        });
        ...

28

试试这段代码。在onPageStarted()中显示一个进度对话框、图像或布局,然后在onPageFinished()中隐藏它。

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon)
            {
                // TODO show you progress image
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url)
            {
                // TODO hide your progress image
                super.onPageFinished(view, url);
            }
        });

4
当您不想使用WebChromeClient(接受的答案中),而是使用WebViewClient时,这是一个足够好的解决方案。 - Bartek Lipinski

17

尝试使用以下代码显示ProgressDialog

    webView.setWebChromeClient(new WebChromeClient() {
        private ProgressDialog mProgress;

        @Override
        public void onProgressChanged(WebView view, int progress) {
            if (mProgress == null) {
                mProgress = new ProgressDialog(getActivity());
                mProgress.show();
            }
            mProgress.setMessage("Loading " + String.valueOf(progress) + "%");
            if (progress == 100) {
                mProgress.dismiss();
                mProgress = null;
            }
        }
    });

5

以下是我在KOTLIN中的解决方案:

private fun setupWebView() {

    val webViewClient: WebViewClient = object: WebViewClient() {

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            view?.loadUrl(request?.url.toString())
            return super.shouldOverrideUrlLoading(view, request)
        }

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            showProgressDialog()
            super.onPageStarted(view, url, favicon)
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            hideProgressDialog()
            super.onPageFinished(view, url)
        }
    }
    webView.webViewClient = webViewClient

    webView.settings.defaultTextEncodingName = "utf-8"
}

准备使用 Kotlin :) - Nadeem Iqbal
这个函数在哪里声明的?(showProgressDialog() 和 hideProgressDialog()) - Khris Vandal

4

Java的简单代码--

 webView.setWebViewClient(new WebViewClient{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        pdialog.show();
    }
    @Override
    public void onPageFinished(WebView view, String url)
    {
        pdialog.hide();
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接