Agregar una barra de progreso en WebView

Estoy intentando agregar una barra de progreso / carga a mi aplicación que usa WebView . Estoy confundido sobre cómo implementar una barra de progreso que aparece cada vez que se hace clic en un enlace.

Código actual:

 public class CULearnBrowser extends Activity { WebView webview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new HelloWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("https://culearn.colorado.edu/webct/entryPageIns.dowebct"); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } } 

Diseño de la actividad:

      

Este enlace puede ayudarte.

He agregado algunas líneas en su código y ahora funciona bien con la barra de progreso.

  getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main ); // Makes Progress bar Visible getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); webview = (WebView) findViewById(R.id.webview); webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { //Make the bar disappear after URL is loaded, and changes string to Loading... setTitle("Loading..."); setProgress(progress * 100); //Make the bar disappear after URL is loaded // Return the app name after finish loading if(progress == 100) setTitle(R.string.app_name); } }); webview.setWebViewClient(new HelloWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://www.google.com"); 

en el método oncreate donde ha configurado su vista web.

 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.web_view); web_view = (WebView) findViewById(R.id.web_view); pd = new ProgressDialog(SiteOpenInWebView.this); pd.setMessage("Please wait Loading..."); pd.show(); web_view.setWebViewClient(new MyWebViewClient()); web_view.loadUrl("ur site name"); } 

WebViewClient

 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); if (!pd.isShowing()) { pd.show(); } return true; } @Override public void onPageFinished(WebView view, String url) { System.out.println("on finish"); if (pd.isShowing()) { pd.dismiss(); } } } 

pase su url en este método

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

Aquí está el código que estoy usando:

Dentro de WebViewClient:

  @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); findViewById(R.id.progress1).setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { findViewById(R.id.progress1).setVisibility(View.GONE); } 

Aquí está el XML:

  

Espero que esto ayude..

Ponga una barra de progreso y la vista web dentro de un diagtwig de diseño relativo y establezca las propiedades para la barra de progreso de la siguiente manera:

  1. Haz que su visibilidad sea GONE.
  2. CENTRALO en la Relativelayout.

y luego en onPageStarted () del cliente web, haga visible la barra de progreso para que muestre la barra de progreso cuando ha hecho clic en un enlace. En onPageFinished () hace que la visibilidad de la barra de progreso sea GONE para que desaparezca cuando la página haya terminado de cargarse … Esto funcionará bien para su escenario. Espero que esto ayude…

El mejor enfoque que funcionó para mí es

 webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mProgressBar.setVisibility(ProgressBar.VISIBLE); webView.setVisibility(View.INVISIBLE); } @Override public void onPageCommitVisible(WebView view, String url) { super.onPageCommitVisible(view, url); mProgressBar.setVisibility(ProgressBar.GONE); webView.setVisibility(View.VISIBLE); isWebViewLoadingFirstPage=false; } }