加载 WebView 时的 Android ProgessBar

新手上路,请多包涵

在我的应用程序中,我有一个 WebView 从互联网加载任何 URL。现在,有时由于网络速度较慢,页面需要很长时间才能加载,用户只能看到一个空白屏幕。

我想显示 ProgressBarWebView 被加载并隐藏 ProgessBarWebView 完全加载时

我知道如何使用 ProgressBarAsyncTask s,但这是我的问题。

这是我用来加载我的 WebView 的代码。

     mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setWebViewClient(new HelloWebViewClient());
    mWebView.loadUrl(web_URL);

这是我的自定义 WebViewClient

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

现在,如果我尝试 使用 AsyncTask s 显示 ProgressBar 那么我想我将不得不提供代码以在我的 doInBackGround() 函数中加载 URL AsyncTask 并通过 onProgressUpdate() 函数显示进度。

但是,如何在 doInBackground() 中加载 URL,因为 doInBackground()非 UI 线程 上运行,我将无法在其中使用 mWebView.loadUrl(web_URL)

有什么建议么?我错过了一些明显的东西吗?请指导我。

原文由 Swayam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 402
2 个回答

检查源代码。帮助您并解决您的问题…

 public class AppWebViewClients extends WebViewClient {
     private ProgressBar progressBar;

    public AppWebViewClients(ProgressBar progressBar) {
        this.progressBar=progressBar;
        progressBar.setVisibility(View.VISIBLE);
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.GONE);
    }
}

我认为它对你有帮助。

谢谢。

原文由 Md Abdul Gafur 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Webview 中加载页面时显示加载器的更好方法我在 BaseActivity 中创建了一个加载器:-

 lateinit var loader: Dialog

loader = Loader.getLoader(this)

在 Webview 活动中

webView.settings.javaScriptEnabled = true
        webView.addJavascriptInterface(MyJavaScriptInterface(this@MbWayWebViewActivity), "HtmlViewer")
        webView.settings.setSupportZoom(true)
        webView.settings.builtInZoomControls = true

        webView.webViewClient = object : WebViewClient() {
            @Deprecated("Deprecated in Java")
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                loader.show()
                return false
            }
            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                loader.dismiss()
                binding.webView.loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');")

            }
        }

在 shouldOverrideUrlLoading 方法中显示加载器并在 onPageFinished 中关闭加载器。

希望你的问题解决..

原文由 Surajkaran Meghwanshi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题