当前位置: 移动技术网 > IT编程>移动开发>Android > Android Webview添加网页加载进度条实例详解

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

上海出发一日游,新乐园,卫子夫预告片

推荐阅读: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添加网页加载进度条的相关功能,希望对大家有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网