在子选项卡上显示进度条,直到加载WebView

时间:2010-03-22 22:06:12

标签: android webview progress-bar android-tabhost

在Android应用中,我使用的是TabView,其中一个标签显示了WebView。但是在网页加载之前页面是空白的。如何在页面加载之前显示进度条?它不能位于标题栏中,因为标签栏会隐藏它。

4 个答案:

答案 0 :(得分:17)

我为此使用了ProgressBar。使用这样的布局:

<?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>

我隐藏并显示进度指示器:

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

答案 1 :(得分:2)

Android Developers website有一个非常好的教程。它展示了如何创建Android程序中使用的“旋转轮”进度对话框,甚至还有一些关于如何在单独的线程中处理加载以防止应用程序在加载时冻结的基础知识。

答案 2 :(得分:2)

如果您的问题是“我如何找到加载页面的时间?”,那么:

创建WebViewClient的自定义子类,覆盖onPageFinished()

通过setWebViewClient()

将WebViewClient子类的实例附加到WebView

设置不确定进度指示器(条形图,对话框,RotateAnimation等)

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

在WebView上调用loadUrl()之前

让onPageFinished()摆脱进度指示器(progressDialog.dismiss())

答案 3 :(得分:1)

初始化视图后,只需调用此方法

startWebView(web_view,"Your Url");这里web_view是您初始化的WebView对象。 startWebView()如下:

    private void startWebView(WebView webView,String url) {
 webView.setWebViewClient(new WebViewClient() {
            ProgressDialog progressDialog;

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return false;
            }

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

            public void onLoadResource (WebView view, String url) {

                    if (progressDialog == null) {
                        progressDialog = new ProgressDialog(SponceredDetailsActivity.this);
                        progressDialog.setMessage("Loading...");
                        progressDialog.show();
                    }

            }
            public void onPageFinished(WebView view, String url) {
                try{
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                        progressDialog = null;
                    }

                }catch(Exception exception){
                    exception.printStackTrace();
                }
            }

        });

        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
    }

有时如果URL已经死了,它将被重定向,它将在onPageFinished方法之前到达onLoadResource()。因此,进度条不会被忽略。要解决此问题,请参阅my this Answer

谢谢:)