Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a Progress Bar in WebView

I am trying to add a progress/loading bar to my application that uses WebView. I am confused on how to implement a progress bar that appears every time a link is clicked.

Current code:

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

Activity layout:

<?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  xmlns:android="http://schemas.android.com/apk/res/android"         android:id="@+id/webview"         android:layout_width="fill_parent"         android:layout_height="fill_parent" />      <TextView           android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:text="@string/hello" /> </LinearLayout> 
like image 698
Sean Avatar asked Dec 02 '10 02:12

Sean


People also ask

How do I add a loading bar?

Use the <progress> tag to create a progress bar in HTML. The HTML <progress> tag specifies a completion progress of a task. It is displayed as a progress bar. The value of progress bar can be manipulated by JavaScript.

How do I get events on WebView?

This example demonstrates how do I get onClick event on webView in android. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.


2 Answers

I have added few lines in your code and now its working fine with progress bar.

        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"); 
like image 87
Sandy Avatar answered Sep 26 '22 00:09

Sandy


pass your url in this method

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);     } 
like image 42
Ishant Garg Avatar answered Sep 25 '22 00:09

Ishant Garg