Show a progress bar on a child tab until the WebView loads
Asked Answered
H

3

6

In an Android app I am using a TabView and one of the tabs shows a WebView. But the page is blank until the web page loads. How would one show a progress bar until the page loads? It cannot be in the title bar because that is hidden by the tab host.

Harkness answered 22/3, 2010 at 22:6 Comment(0)
H
17

I use a ProgressBar for this. With a layout like this:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout [...]>

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

  <ProgressBar 
       android:id="@+id/ProgressBar"
       android:layout_centerInParent="true"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="?android:attr/progressBarStyleLarge"
       android:visibility="gone"/>
</RelativeLayout>

I hide and show the progress indicator using:

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

 final ProgressBar progess = (ProgressBar) findViewById(R.id.ProgressBar);

  webView.setWebViewClient(new WebViewClient() {
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
    progess.setVisibility(View.VISIBLE);
  }

  public void onPageFinished(WebView view, String url) {
    progess.setVisibility(View.GONE);
  }
}
Hurds answered 2/12, 2011 at 12:32 Comment(0)
R
2

There's a really good tutorial on the Android Developers website for that. It shows how to create the 'spinning wheel' progress dialog used throughout Android programs, and even some basics on how to handle loading in a separate thread to prevent your application from freezing while loading.

Ratable answered 22/3, 2010 at 22:39 Comment(2)
In terms of page loading, you can attach a WebViewClient to the WebView and find out when the page is loaded, so you know when you can dismiss the dialog.Precedency
ok but how to relaunch the progressDialog when clicking on a link inside webview ?Longing
R
2

If your question is "how do I find out when the page is loaded?", then:

Create a custom subclass of WebViewClient, overriding onPageFinished()

Attach an instance of your WebViewClient subclass to your WebView via setWebViewClient()

Set up the indefinite progress indicator (bar, dialog, RotateAnimation, etc.)

progressDialog = ProgressDialog.show(this, "", getText(R.string.progressDialogText), true);

before calling loadUrl() on the WebView

Have onPageFinished() get rid of the progress indicator (progressDialog.dismiss())

Redan answered 2/9, 2010 at 9:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.