webview添加网页加载进度条

最近在android项目中使用webview嵌套了一个抽奖活动网页,活动上线,运行良好(改了N次需求和突发bug),还好这种模式的活动,只需要修改网页,不需要重新打包发布市场,这也是这种模式开发的优势之一。后来据产品哥反馈说加载网页无进度提示,好吧,这个当时真没考虑这么多,这个要加加..想当然以为轻松搞定之....其实还是比轻松要复杂点...

1、首先自定义一个WebView控件

 1 /**
 2  * 带进度条的Webivew
 3  * @author [email protected]
 4  */
 5 @SuppressWarnings("deprecation")
 6 public class ProgressWebView extends WebView {
 7     private final static String TAG = ProgressWebView.class.getSimpleName();
 8
 9     private ProgressBar progressBar;
10     private Context context;
11
12     public ProgressWebView(Context context, AttributeSet attrs) {
13         super(context, attrs);
14         this.context = context;
15         progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
16         progressBar.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.MATCH_PARENT, 3, 0, 0));
17         progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.wevbview_progressbar));
18         addView(progressBar);
19         setWebChromeClient(new WebChromeClient());
20     }
21
22     public class WebChromeClient extends android.webkit.WebChromeClient {
23         @Override
24         public void onProgressChanged(WebView view, int newProgress) {
25             Log.d(TAG, "newProgress" + newProgress);
26             if (newProgress == 100) {
27                 progressBar.setVisibility(GONE);
28             } else {
29                 if (progressBar.getVisibility() == GONE)
30                     progressBar.setVisibility(VISIBLE);
31                 progressBar.setProgress(newProgress);
32             }
33             super.onProgressChanged(view, newProgress);
34         }
35
36         // 处理javascript中的console.log
37         @Override
38         public boolean onConsoleMessage(ConsoleMessage cm){
39             android.util.Log.d(TAG, "webview console " + cm.lineNumber() + " of " + cm.sourceId() + " : " + cm.message());
40             return true;
41         }
42
43         // 处理javascript中的alert()
44         @Override
45         public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
46             ToastUtil.showMessage(context, message, Toast.LENGTH_SHORT, Gravity.CENTER);
47             result.cancel();
48             return true;
49         }
50
51     }
52
53     @Override
54     protected void onScrollChanged(int l, int t, int oldl, int oldt) {
55         LayoutParams lp = (LayoutParams) progressBar.getLayoutParams();
56         lp.x = l;
57         lp.y = t;
58         progressBar.setLayoutParams(lp);
59         super.onScrollChanged(l, t, oldl, oldt);
60     }
61 }

2、在需要使用webview的layout文件中引入这个控件

1  <cn.net.huami.ui.view.ProgressWebView
2             android:id="@+id/them_webview"
3              android:layout_width="match_parent"
4              android:layout_height="match_parent" />

3、添加个drawable文件,修改progress控制的进度条样式

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 3     <!-- 背景 -->
 4     <item android:id="@android:id/background">
 5         <shape>
 6             <solid android:color="@color/default_bg" />
 7         </shape>
 8     </item>
 9     <!-- 进度条 -->
10     <item android:id="@android:id/progress">
11         <clip>
12             <shape>
13                 <solid android:color="#2E8AE7" />
14             </shape>
15         </clip>
16     </item>
17 </layer-list>

4、在activity或fragment中使用这个控件的相关代码

 1 ProgressWebView webView = (ProgressWebView)findViewById(R.id.them_webview);
 2
 3 webView.setDownloadListener(new DownloadListener() {
 4             @Override
 5             public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
 6                 if (url != null && url.startsWith("http://"))
 7                     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
 8             }
 9         });
10  webView.loadUrl("网页url");
时间: 2024-11-03 22:10:29

webview添加网页加载进度条的相关文章

iOS WKWebView添加网页加载进度条(转)

一.效果展示 WKWebProgressViewDemo.gif 二.主要步骤 1.添加UIProgressView属性 @property (nonatomic, strong) WKWebView *wkWebView; @property (nonatomic, strong) UIProgressView *progressView; 2.初始化progressView - (void)viewDidLoad { [super viewDidLoad]; //进度条初始化 self.pr

Chromium中网页加载进度条研究

1.     Shell.java中有成员变量:mProgressDrawable. 该成员变量在方法:onFinishInflate中被初始化. 在该类中有方法:onLoadProgressChanged,该方法中对进度条的值进行改变,并且对刷新完成事件进行反馈. 2.     上面的这个方法是在cc文件中被调用的. 上面方法对应的cc方法是shell_android.cc文件中的LoadProgressChanged方法. voidShell::LoadProgressChanged(Web

HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等

今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务,网页加载等:如果有使用html5为手机布局的,也可以用于手机中~ 效果图: 1.html结构: <div id="loadBar01" class="loadBar"> <div> <span class="percent&qu

网页加载进度条

( 网页加载时,有时内容过多,一直加载等待,而此时网页显示白色不显示任何的东西,给用户的体验相当不好,所以,一般会在网页加载成功前,会以进度条的形式,给用户进行展示.让用户可以看到动画,知道网页正在加载中) 常见的方式有以下: 1. 定时器的进度条(假的) <script type="text/javascript">     $(function(){         var loading='<div class="loading">&l

网页加载进度条的实现

本次主要介绍一下网页加载进度的实现.如下图,在页面加载的时候,上方红色的进度条 网页加载进度的好处是能够更好的反应当前网页的加载进度情况,loading进度条可用动画的形式从开始0%到100%完成网页加载这一过程.但是目前的浏览器并没有提供页面加载进度方面的接口,也就是说页面还无法准确返回页面实际加载的进度,本文中我们使用jQuery来实现页面加载进度条效果. 首先我们要知道的是,目前没有任何浏览器可以直接获取正在加载对象的大小.所以我们无法通过数据大小来实现0-100%的加载显示过程. 因此我

【css系列】创建网页加载进度条

一.最简单或者明显的方式是使用定时器 1.在网页中加入布局覆盖真实网页内容 2.使用定时器确定加载所用时间的长短,其实并不是真正的加载进度实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>定时器的进度条</title> <script src="../js/jquery-3.2.1.j

网页加载进度条的JS程序开发思路与实际应用

一款好的产品,都需要有一个漂亮的loading界面.lodaing界面不仅能给用户带来良好的体验,而且有效的消除了程序加载等待过程中的枯躁感. loading进度条更是对当前加载进度的一个良好反馈.从0%-100%的加载进度可以有效的告知用户还有多久即可打开页面.带有进度条的loading界面在程序中并不罕见,但是在web中呢?到目前为止浏览器并没有提供有效的浏览器对象来反馈页面的加载进度,所以无法直接.便捷的获得页面加载进度的反馈.本文主要是讲述如何以通过jquery的方式来实现页面加载进度的

【WebView】带加载进度条的WebView及Chrome联调

先看效果图: 看到顶部蓝色的进度条了. 原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的.所以普通的WebView是无法实现进度条的. 下面直接上干货: /** * ProgressWebView * * @author lif * * */ @SuppressWarnings("deprecation") public class Progres

Jquery网页加载进度条(随笔,当然要随便写,当日记动态心情写咯)

首先先是吐槽时间... 告诉大家一个好消息,就是有个妹子非常仰慕我的前端技术说要包养我 然后有好多羡慕嫉妒恨的童鞋一定要说,少年你太天真了,那一定是HR 然后我表示她不是HR,本宅的春天貌似要到来了...T_T,25年的单身生涯.终于走到了尽头......然后妹子也是前端...为了保证光辉形象.我必要努力提升技术 然后么今天闲的蛋疼,再看看一帮大牛们的装逼网站,然后无意间看到这一段,只想说大牛们的世界真会玩.... 利用图片上data,还有load 最后在用document.readyState