@override
public void onprogresschanged(webview view, int newprogress) {
super.onprogresschanged(view, newprogress);
if (newprogress == 100) {
mprogressbar.setvisibility(view.gone);
} else {
mprogressbar.setvisibility(view.visible);
mprogressbar.setprogress(newprogress);
}
}
});
(2)如果希望浏览的网页后退而不是退出浏览器,需要webview覆盖url加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。
/**
-
在onkeydown中设置webview在返回的时候
-
自动记录浏览记录
-
@param keycode
-
@param event
-
@return
*/
@override
public boolean onkeydown(int keycode, keyevent event) {
if (keycode == keyevent.keycode_back){
if (mwebview.cangoback()){
mwebview.goback();
return true;
}else {
finish();
}
}
return super.onkeydown(keycode, event);
}
(3)创建一个自己的webviewclient,通过setwebviewclient关联
//覆盖webview默认使用第三方或系统默认浏览器打开网页的行为,使网页用webview打开
mwebview.setwebviewclient(new webviewclient() {
@override
public boolean shouldoverrideurlloading(webview view, string url) {
//返回值是true的时候控制去webview打开,为false调用系统浏览器或第三方浏览器
view.loadurl(url);
return true;
}
/**
-
1.网页页面开始加载的时候,执行的回调方法,可以实现加载等待界面
-
2.在此方法中设置一个超时计时器
-
@param view
-
@param url
-
@param favicon
*/
@override
public void onpagestarted(webview view, string url, bitmap favicon) {
super.onpagestarted(view, url, favicon);
mlinearlayout.setvisibility(view.gone);
mrelativelayout.setvisibility(view.visible);
}
/**
-
1.网页加载结束的时候,也要隐藏等待界面
-
2.onpagefinished指页面加载完成,完成后取消计时器
-
@param view
-
@param url
*/
@override
public void onpagefinished(webview view, string url) {
super.onpagefinished(view, url);
mlinearlayout.setvisibility(view.visible);
mrelativelayout.setvisibility(view.gone);
}
/**
-
加载异常的界面
-
@param view
-
@param request
-
@param error
*/
@override
public void onreceivederror(webview view, webresourcerequest request, webresourceerror error) {
super.onreceivederror(view, request, error);
log.d(“testtimeout”, “-----------加载异常”);
}
});
(4)访问的页面中有javascript,则webview必须设置支持javascript
websettings mwebsettings = mwebview.getsettings();
mwebsettings.setjavascriptenabled(true);
(5)缓存的使用
优先使用缓存
mwebview.getsettings().setcachemode(websettings.load_cache_else_network);
不使用缓存
mwebview.getsettings().setcachemode(websettings.load_no_cache);
特殊使用
先给大家说说怎么获取这个html的标题title
应用开发的时候使用webview这个组件的过程中可能会接触到webviewclient与webchromeclient,那么这两个类到底有什么不同呢 ,webviewclient主要帮助webview处理各种通知、请求事件的,比如:
onloadresource
onpagestart
onpagefinish
onreceiveerror
onreceivedhttpauthrequest
webchromeclient主要辅助webview处理javascript的对话框、网站图标、网站title、加载进度等比如
onclosewindow(关闭webview)
oncreatewindow()
onjsalert (webview上alert无效,需要定制webchromeclient处理弹出)
onjsprompt
onjsconfirm
onprogresschanged
onreceivedicon
onreceivedtitle
我们在 webchromeclient 中的 onreceivedtitle() 方法里判断html页面的标题中是否含有 “error”,如果有,则证明html加载失败,设置加载失败的标记,让在 webviewclient 的完成是回 调的 onpagefinish() 方法里显示自定义的加载失败的页面。
使用的是不要忘了添加网络权限:
最后张贴一下全部代码:
public class mainactivity extends appcompatactivity {
private webview mwebview;
private progressbar mprogressbar;
private linearlayout mlinearlayout;
private relativelayout mrelativelayout;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar);
setsupportactionbar(toolbar);
init();
}
private void init() {
mwebview = (webview)findviewbyid(r.id.webview);
mprogressbar = (progressbar)findviewbyid(r.id.progressbar);
mlinearlayout = (linearlayout)findviewbyid(r.id.linearlayout);
mrelativelayout = (relativelayout)findviewbyid(r.id.relativwlayout);
//webview加载web资源
mwebview.loadurl(“https://www.baidu.com/”);
/**
- 对webview设置监听器
*/
websettings mwebsettings = mwebview.getsettings();
mwebsettings.setjavascriptenabled(true);
mwebview.setwebchromeclient(new webchromeclient() {
@override
public void onprogresschanged(webview view, int newprogress) {
super.onprogresschanged(view, newprogress);
if (newprogress == 100) {
mprogressbar.setvisibility(view.gone);
} else {
mprogressbar.setvisibility(view.visible);
mprogressbar.setprogress(newprogress);
}
}
});
//覆盖webview默认使用第三方或系统默认浏览器打开网页的行为,使网页用webview打开
mwebview.setwebviewclient(new webviewclient() {
@override
public boolean shouldoverrideurlloading(webview view, string url) {
//返回值是true的时候控制去webview打开,为false调用系统浏览器或第三方浏览器
view.loadurl(url);
return true;
}
/**
-
1.网页页面开始加载的时候,执行的回调方法,可以实现加载等待界面
-
2.在此方法中设置一个超时计时器
-
@param view
-
@param url
-
@param favicon
*/
@override
public void onpagestarted(webview view, string url, bitmap favicon) {
super.onpagestarted(view, url, favicon);
mlinearlayout.setvisibility(view.gone);
mrelativelayout.setvisibility(view.visible);
}
/**
-
1.网页加载结束的时候,也要隐藏等待界面
-
2.onpagefinished指页面加载完成,完成后取消计时器
-
@param view
-
@param url
*/
@override
public void onpagefinished(webview view, string url) {
super.onpagefinished(view, url);
mlinearlayout.setvisibility(view.visible);
mrelativelayout.setvisibility(view.gone);
}
/**
-
加载异常的界面
-
@param view
-
@param request
-
@param error
*/
@override
public void onreceivederror(webview view, webresourcerequest request, webresourceerror error) {
super.onreceivederror(view, request, error);
log.d(“testtimeout”, “-----------加载异常”);
}
});
//设置访问文件
mwebsettings.setallowcontentaccess(true);
mwebsettings.setcachemode(websettings.load_no_cache);
}
/**
-
在onkeydown中设置webview在返回的时候
-
自动记录浏览记录
-
@param keycode
-
@param event
-
@return
*/
@override
public boolean onkeydown(int keycode, keyevent event) {
if (keycode == keyevent.keycode_back){
if (mwebview.cangoback()){
mwebview.goback();
return true;
}else {
finish();
}
}
return super.onkeydown(keycode, event);
}
}
webview调用js的使用方式
(1)首先写js文件 js_test.js
function alertfromjs(content){
alert(“from js:” + content);
}
简单的一个函数,功能就是弹出一个alert。
写html文件 index.html,在html里加载js文件,注意路径
加载html网页成功!
将index.html和js_test.js放到jstest文件夹里,将jstest放入到安卓工程assets中。
写xml布局文件:
<linearlayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽
自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-hza4mcd6-1712396465102)]
[外链图片转存中…(img-vfdscf4b-1712396465103)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-cozcyxxx-1712396465103)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽
发表评论