欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Webview添加网页加载进度条实例详解

程序员文章站 2024-02-19 22:29:22
推荐阅读:android webview线性进度条实例详解 最近在android项目中使用webview嵌套了一个抽奖活动网页,活动上线,运行良好(改了n次需求和突发bu...

推荐阅读:android webview线性进度条实例详解

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

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

/**
* 带进度条的webivew
* @author lirunzi@.com
*/
@suppresswarnings("deprecation")
public class progresswebview extends webview {
private final static string tag = progresswebview.class.getsimplename();
private progressbar progressbar;
private context context;
public progresswebview(context context, attributeset attrs) {
super(context, attrs);
this.context = context;
progressbar = new progressbar(context, null, android.r.attr.progressbarstylehorizontal);
progressbar.setlayoutparams(new absolutelayout.layoutparams(absolutelayout.layoutparams.match_parent, , , ));
progressbar.setprogressdrawable(getresources().getdrawable(r.drawable.wevbview_progressbar));
addview(progressbar);
setwebchromeclient(new webchromeclient());
}
public class webchromeclient extends android.webkit.webchromeclient {
@override
public void onprogresschanged(webview view, int newprogress) {
log.d(tag, "newprogress" + newprogress);
if (newprogress == ) {
progressbar.setvisibility(gone);
} else {
if (progressbar.getvisibility() == gone)
progressbar.setvisibility(visible);
progressbar.setprogress(newprogress);
}
super.onprogresschanged(view, newprogress);
}
// 处理javascript中的console.log
@override
public boolean onconsolemessage(consolemessage cm){
android.util.log.d(tag, "webview console " + cm.linenumber() + " of " + cm.sourceid() + " : " + cm.message());
return true;
}
// 处理javascript中的alert()
@override
public boolean onjsalert(webview view, string url, string message, jsresult result) {
toastutil.showmessage(context, message, toast.length_short, gravity.center);
result.cancel();
return true;
}
}
@override
protected void onscrollchanged(int l, int t, int oldl, int oldt) {
layoutparams lp = (layoutparams) progressbar.getlayoutparams();
lp.x = l;
lp.y = t;
progressbar.setlayoutparams(lp);
super.onscrollchanged(l, t, oldl, oldt);
}
} 

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

<cn.net.huami.ui.view.progresswebview 
android:id="@+id/them_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" /> 

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

<?xml version="." encoding="utf-"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 背景 -->
<item android:id="@android:id/background">
<shape>
<solid android:color="@color/default_bg" />
</shape>
</item>
<!-- 进度条 -->
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#eae" />
</shape>
</clip>
</item>
</layer-list> 

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

progresswebview webview = (progresswebview)findviewbyid(r.id.them_webview);
webview.setdownloadlistener(new downloadlistener() {
@override
public void ondownloadstart(string url, string useragent, string contentdisposition, string mimetype, long contentlength) {
if (url != null && url.startswith("http://"))
startactivity(new intent(intent.action_view, uri.parse(url)));
}
});
webview.loadurl("网页url");

通过以上代码实现了 webview添加网页加载进度条的相关功能,希望对大家有所帮助。