当前位置:  开发笔记 > 编程语言 > 正文

Android WebView进度条

如何解决《AndroidWebView进度条》经验,为你挑选了4个好方法。

我在这里看了一个类似的问题,但是因为我是一个新手,有人可以解释如何让它在WebView中工作,或至少如何设置10秒的时间延迟让人们知道它正在加载?



1> Yahyaotaif..:

对于水平进度条,首先需要定义进度条并将其与XML文件链接,如下所示onCreate:

final TextView txtview = (TextView)findViewById(R.id.tV1);
final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1);

然后,您可以在WebChromeClient中使用onProgressChanged方法:

MyView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
               if(progress < 100 && pbar.getVisibility() == ProgressBar.GONE){
                   pbar.setVisibility(ProgressBar.VISIBLE);
                   txtview.setVisibility(View.VISIBLE);
               }

               pbar.setProgress(progress);
               if(progress == 100) {
                   pbar.setVisibility(ProgressBar.GONE);
                   txtview.setVisibility(View.GONE);
               }
            }
        });

在那之后,在你的布局中你有类似的东西





这就是我在我的应用程序中做到的方式.



2> Max Marroni..:

我刚刚在这里找到了一个非常好的示例:http: //developer.android.com/reference/android/webkit/WebView.html.您只需要更改setprogress:

activity.setProgress(progress * 1000);

activity.setProgress(progress * 100);



3> Md. Sajedul ..:

这是在android Web View中添加进度条的最简单方法.

在您的activity/fragment中添加一个布尔字段

private boolean isRedirected;

这个布尔值将阻止网页重定向导致死链接.现在您只需将WebView对象和Web Url传递给此方法即可.

private void startWebView(WebView webView,String url) {

    webView.setWebViewClient(new WebViewClient() {
        ProgressDialog progressDialog;

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

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

        public void onLoadResource (WebView view, String url) {
            if (!isRedirected) {
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(SponceredDetailsActivity.this);
                    progressDialog.setMessage("Loading...");
                    progressDialog.show();
                }
            }

        }
        public void onPageFinished(WebView view, String url) {
            try{
                isRedirected=true;

                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }



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

    });

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

这里开始加载时会调用onPageStarted.这里我设置布尔字段是假的.但是当页面加载完成时,它将转到onPageFinished方法,这里布尔字段设置为true.有时如果网址已经死了,它会被重定向,并且会 onLoadResource()onPageFinished方法之前出现 .因此,它不会隐藏进度条.为了防止这种情况我检查if (!isRedirected)onLoadResource()

onPageFinished()解除进度对话框之前的方法中,您可以编写10秒延时代码

而已.快乐编码:)



4> CoolMind..:

根据Sajedul Karim博士的回答,我写了一篇类似的文章。

webView = (WebView) view.findViewById(R.id.web);
progressBar = (ProgressBar) view.findViewById(R.id.progress);
webView.setWebChromeClient(new WebChromeClient());

setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        setProgressBarVisibility(View.VISIBLE);
    }

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

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        Toast.makeText(getActivity(), "Cannot load page", Toast.LENGTH_SHORT).show();
        setProgressBarVisibility(View.GONE);
    }
});

webView.loadUrl(url);

private void setProgressBarVisibility(int visibility) {
    // If a user returns back, a NPE may occur if WebView is still loading a page and then tries to hide a ProgressBar.
    if (progressBar != null) {
        progressBar.setVisibility(visibility);
    }
}

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有