Question

Here is my code that I have used to show the progress bar inside webview. Pls Correcr my code, to show horizontal style Progress Bar to track when WebVIew done with loading URL, show progress bar each time user clicks links, add code to show progressbar.

package com.pskpartha.droidwebview;

import com.pskpartha.droidwebview.info.Info;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebSettings.PluginState;
import android.widget.ProgressBar;

public class DroidWebViewActivity extends Activity {
/** Called when the activity is first created. */
Context con;
private WebView fweBview;
private WebSettings webSettings;
ProgressBar progressBar;

String url = Info.WebUrl;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    con = this;
    try {
        if (!SharedPreferencesHelper.isOnline(con)) {
            AlertMessage.showMessage(con, "", "No internet connection");
            return;
        }
        updateWebView(url);

    } catch (Exception e) {
        // TODO: handle exception
    }
}


private class HelloWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        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);
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && fweBview.canGoBack()) {
        fweBview.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);

}
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);
    }
}
private void updateWebView(String url) {
    // TODO Auto-generated method stub
    progressBar = (ProgressBar) findViewById(R.id.progressBar1);
    fweBview = (WebView) findViewById(R.id.fbwebView);
    fweBview.getSettings().setJavaScriptEnabled(true);
    fweBview.getSettings().setDomStorageEnabled(true);
    fweBview.getSettings().setPluginState(PluginState.ON);
    webSettings = fweBview.getSettings();

    webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
    webSettings.setBuiltInZoomControls(true);

    fweBview.loadUrl(url);

    fweBview.setWebViewClient(new HelloWebViewClient());

}

// /---- Rating Button-----------------------------

public void btnRating(View v) {

    try {

        alertbox(null, null);

    } catch (Exception e) {
        // TODO: handle exception
    }

}

protected void alertbox(String title, String mymessage) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Encourage us By Rating Our App").setCancelable(
            false).setTitle("").setPositiveButton("Rate Now",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // finish the current activity
                    // AlertBoxAdvance.this.finish();
                    /*
                     * Intent myIntent = new Intent(
                     * Settings.ACTION_SECURITY_SETTINGS);
                     * startActivity(myIntent);
                     */
                    Intent viewIntent = new Intent(
                            "android.intent.action.VIEW",
                            Uri
                                    .parse(Info.GooglePlayAppUrl));
                    startActivity(viewIntent);
                    dialog.cancel();
                }
            }).setNegativeButton("Later",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // cancel the dialog box

                    dialog.cancel();
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

// ------------ Share button---------------------

public void btnShare(View v) {

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
            "    ");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "shareBody");
    startActivity(Intent.createChooser(sharingIntent, "Share via"));
}

// ------------ Home button---------------------
public void btnHome(View v) {
    try {
        updateWebView(url);
    } catch (Exception e) {
        // TODO: handle exception
    }

    // Intent i = new Intent(DroidWebViewActivity.this,
    // DroidWebViewActivity.class); // your class
    // startActivity(i);

}

// ------------ Email button---------------------
public void btnEmail(View v) {

    Intent email = new Intent(Intent.ACTION_SEND);
    email.putExtra(Intent.EXTRA_EMAIL,
            new String[] { "" });
    email.putExtra(Intent.EXTRA_SUBJECT, Info.eMailSubject);
    email.putExtra(Intent.EXTRA_TEXT, Info.eMailDetails);
    email.setType("message/rfc822");
    startActivity(Intent.createChooser(email, "Choose an Email client :"));

}

// ------------ Call button---------------------
private void call() {
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:"+Info.phoneNumber+""));
        startActivity(callIntent);
    } catch (ActivityNotFoundException activityException) {

    }
}

public void btnPhone(View v) {

    try {

        call();

    } catch (Exception e) {
        // TODO: handle exception
    }

}
}


 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fff"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="9"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center" >
    </LinearLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="vertical" >

            <ProgressBar
                android:id="@+id/progressBar12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center" />


    </RelativeLayout>

    <WebView
        android:id="@+id/fbwebView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

</LinearLayout>'
Was it helpful?

Solution

Here is the Modified Java File and Also The XML..

The Java File is DroidWebViewActivity

and The XML File... XML File

Hope it works for you.

Thanks

OTHER TIPS

Please remove

requestWindowFeature(Window.FEATURE_NO_TITLE);

and Add

getWindow().requestFeature(Window.FEATURE_PROGRESS);

before

setContentView(R.layout.main);

It will display progress bar at top of your screen while loading URL. Hope it will solve your problem...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top