在加载Android的Webview之前显示活动圆圈

4
我正在使用webview在应用中展示一个网页,该网页需要大约2-3秒钟的时间进行加载。在网页加载完成之前,我想显示一个活动进度圆形进度条,就像这里所示的那样。
具体如下图:

我应该如何实现呢?我在网上搜索过,但没有找到令人满意和适当的解释。谢谢!

WebViewPage.java

public class Webpage extends Activity {

WebView web;
ProgressBar progressBar;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.web_page);

    Intent startwebpage = getIntent();

    web = (WebView) findViewById(R.id.webView);
    web.setWebViewClient(new myWebClient());

    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("http://www.google.com");
}

public class myWebClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

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

不要在 shouldOverrideUrlLoading 中调用 view.loadUrl。如果你这样做,像这样的页面:http://jsbin.com/gupug/1/quiet 将会破坏你的应用程序。 - marcin.kosiba
2个回答

4
onPageStarted方法中显示progressBar,并在onPageFinished方法中关闭它。
    private ProgressDialog progressBar;
  1. Show progressBar in onPageStarted:

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    
         // prepare for a progress bar dialog
            progressBar = new ProgressDialog(v.getContext());
            progressBar.setCancelable(true);
            progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);            
            progressBar.show();
    }
    

2. 在 onPageFinished 中取消它:

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);

        progressBar.dismiss();
    }

编辑:请使用ProgressBar代替ProgressDialog

  1. Use Following code in your layout. Use drawable of your choice for "@drawable/progress"

     <ProgressBar
        android:id="@+id/progress_bar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:visibility="gone"
        android:indeterminateDrawable="@drawable/progress" >
    </ProgressBar>
    
  2. Inflate it in your activity. Make it visible in onPageStarted and gone in onPageFinished.

    private ProgressBar prgrsBar;
    
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    
        prgrsBar.setVisibility(View.VISIBLE);
    }
    
     @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
    
        prgrsBar.setVisibility(View.GONE);
    }
    

我觉得你误解了我的问题!我不想显示对话框。我想要显示一个像我问题中展示的那样的动画活动圆圈。 - Chinmay Dabke
好的,那么我建议您使用进度条而不是ProgressDialog。请检查编辑后的答案。 - Ritesh Gune

0
这对我有用: ProgressDialog pb = null;
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);

            // prepare for a progress bar dialog
            if (pb == null) {
                pb = new ProgressDialog(Quiz.this);
                pb.setCancelable(true);
                pb.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                pb.show();
            }
        }

        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

            pb.dismiss();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接