首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android WebView进度条

Android WebView进度条
EN

Stack Overflow用户
提问于 2010-03-29 19:23:45
回答 6查看 109.4K关注 0票数 70

我看过一个类似于这个here的问题,但作为一个新手,有人能解释一下如何让它在WebView中工作,或者至少如何设置10秒的延迟,以便人们知道它正在加载吗?

EN

回答 6

Stack Overflow用户

发布于 2011-12-12 05:02:58

对于水平进度条,首先需要定义进度条,并将其与onCreate中的XML文件链接起来

代码语言:javascript
复制
final TextView txtview = (TextView)findViewById(R.id.tV1);
final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1);

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

代码语言:javascript
复制
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);
               }
            }
        });

在那之后,在你的布局中你会看到类似这样的东西

代码语言:javascript
复制
<TextView android:text="Loading, . . ." 
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:id="@+id/tV1" android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:textColor="#000000"></TextView>

<ProgressBar android:id="@+id/pB1"
    style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:layout_centerVertical="true"
    android:padding="2dip">
</ProgressBar>

这就是我如何在我的应用程序中做到这一点。

票数 144
EN

Stack Overflow用户

发布于 2010-03-29 20:40:59

我刚刚在这里找到了一个很好的例子:http://developer.android.com/reference/android/webkit/WebView.html。您只需将setprogress从:

代码语言:javascript
复制
activity.setProgress(progress * 1000);

代码语言:javascript
复制
activity.setProgress(progress * 100);
票数 21
EN

Stack Overflow用户

发布于 2016-03-21 18:15:37

下面是在android Web View中添加进度条的最简单方法。

在您的活动/片段中添加一个布尔型字段

代码语言:javascript
复制
private boolean isRedirected;

此布尔值将防止网页重定向导致的死URL,您只需将WebView对象和web传递到此方法中即可。

代码语言:javascript
复制
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。这里我将布尔值字段设置为false。但是当页面加载完成时,它将转到onPageFinished方法,并且这里的布尔值字段被设置为真。有时,如果url是死的,它会被重定向,并且会在onPageFinished方法之前到达onLoadResource()。因此,它不会隐藏进度条。为了防止这种情况,我在onLoadResource()中检查if (!isRedirected)

在关闭进度对话框之前,您可以在onPageFinished()方法中编写10秒延迟代码

就这样。快乐编码:)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2537454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档