Android ProgessBar在加载WebView时

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

我想在WebView加载时显示一个ProgressBar ,当WebView完全加载时隐藏ProgessBar

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

这是我用来加载我的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显示ProgressBar那么我想我将不得不让代码加载我的AsyncTaskdoInBackGround()函数中的URL,并通过onProgressUpdate()函数显示进度。

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

有什么建议么? 我错过了什么明显的? 请指导我

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

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

我认为这对你有帮助。

谢谢。

我想显示一个progressBar而webView被加载,并隐藏proViewBar当webView被完全加载。

以下代码将帮助你。

main.xml中

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /> </LinearLayout> 

Main.class

 public class Main extends Activity { private WebView webview; private static final String TAG = "Main"; private ProgressDialog progressBar; /** Called when the activity is first created. */@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); this.webview = (WebView) findViewById(R.id.webview); WebSettings settings = webview.getSettings(); settings.setJavaScriptEnabled(true); webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); progressBar = ProgressDialog.show(Main.this, "Showing ProgressDialog", "Loading..."); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.i(TAG, "Processing webview url click..."); view.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { Log.i(TAG, "Finished loading URL: " + url); if (progressBar.isShowing()) { progressBar.dismiss(); } } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.e(TAG, "Error: " + description); Toast.makeText(Main.this, "Oh no! " + description, Toast.LENGTH_SHORT).show(); alertDialog.setTitle("Error"); alertDialog.setMessage(description); alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }); alertDialog.show(); } }); webview.loadUrl("http://www.google.com"); } } 

在这个方法中传递你的url

 private void startWebView(String url) { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); progressDialog = new ProgressDialog(ContestActivity.this); progressDialog.setMessage("Loading..."); progressDialog.show(); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(ContestActivity.this, "Error:" + description, Toast.LENGTH_SHORT).show(); } }); webView.loadUrl(url); } 
  myThanh.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); progressBar = ProgressDialog.show(MainActivity.this,"Đang tải dữ liệu", "Vui lòng chờ..."); myThanh.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { if (progressBar.isShowing()) { progressBar.dismiss(); } } }); 

这个简单的解决方案在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.javaScriptEnabled = true webView.settings.defaultTextEncodingName = "utf-8" }