我在这里看了一个类似的问题,但是因为我是一个新手,有人可以解释如何让它在WebView中工作,或至少如何设置10秒的时间延迟让人们知道它正在加载?
对于水平进度条,首先需要定义进度条并将其与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); } } });
在那之后,在你的布局中你有类似的东西
这就是我在我的应用程序中做到的方式.
我刚刚在这里找到了一个非常好的示例:http: //developer.android.com/reference/android/webkit/WebView.html.您只需要更改setprogress:
activity.setProgress(progress * 1000);
至
activity.setProgress(progress * 100);
这是在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秒延时代码
而已.快乐编码:)
根据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); } }