Rakesh Yadav
Rakesh Yadav

Reputation: 1985

How to know if webView started rendering in android

I am loading a pdf in WebView.

WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient());

String url = "http://drive.google.com/viewerng/viewer?embedded=true&url=http://" + getIntent().getStringExtra("url");

webView.loadUrl(url);
setContentView(webView);

Whenever the activity is started, WebView is shown blank. But I want to show a progress dialog till the WebView starts rendering pdf file. How can I add a listener to the WebView indicating that the files has been started visible to the user.

Upvotes: 1

Views: 732

Answers (3)

Jai
Jai

Reputation: 1984

You could create custom class and extend it with WebViewClient. Then override method onPageStarted where you could consider that it started rendering. For e.g :

private class CustomWebClient extends WebViewClient {

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
      super.onPageStarted(view, url, favicon);

      showProgress();

   }
   @Override
   public void onPageFinished(WebView view, String url) {
       super.onPageFinished(view, url);
       dismissDialog();
   }

}

Upvotes: 0

Arti
Arti

Reputation: 970

You can use setWebViewClient and display showProgress as below code

WebSettings settings = webView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setPluginState(WebSettings.PluginState.ON);
            webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

            showProgress();
            webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }

                public void onPageFinished(WebView view, String url) {
                    hideProgress();
                }

                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    hideProgress();
                }

            });

String url = "http://drive.google.com/viewerng/viewer?embedded=true&url=http://" + getIntent().getStringExtra("url");

webView.loadUrl(url);

Upvotes: 1

Kona Suresh
Kona Suresh

Reputation: 1854

public class FGWebViewClient extends WebViewClient {

private WebViewClient wvc;
private static final String TAG=FGWebViewClient.class.getCanonicalName();
ProgressDialog mProgressDialog;

 // when you add the webviewclient then show the progressDialog.
public FGWebViewClient(Context context) {
    Log.i(TAG, "FGWebViewClient Called...");

   this.wvc=wvc;
    mProgressDialog=new ProgressDialog(context);
    mProgressDialog.setMessage("URL Loading...");
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    mProgressDialog.setCanceledOnTouchOutside(false);


    if(mProgressDialog!=null){
        mProgressDialog.show();
    }



}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(TAG,"shouldOverrideUrlLoading");
    return  wvc.shouldOverrideUrlLoading(view, url);
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

    Log.i(TAG,"onPageStarted");

    wvc.onPageStarted(view, url, favicon);
}
 // OnpageFinished just dismiss the progressDialog.
@Override
public void onPageFinished(WebView view, String url) {

    if(mProgressDialog!=null&&mProgressDialog.isShowing()){
         mProgressDialog.dismiss();
         mProgressDialog=null;
     }

    Log.i(TAG,"onPageFinished");
    //To clear cache of webview
    //view.clearCache(true);
    //clearEveryThing(view);

    wvc.onPageFinished(view,url);
}

and call like this

WebView webView=(WebView)v.findViewById(R.id.webView1);

        FGWebViewClient webViewClient=  new FGWebViewClient(context);
        webView.setWebViewClient(webViewClient);


        webView.setWebChromeClient(new WebChromeClient());
        webView.clearCache(true);
        webView.clearHistory();
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.loadUrl((webUrl).toString());   

Upvotes: 1

Related Questions