webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webview的强大功能就会显示出来。
1、webview的几点设置
权限设置:.androidmanifest.xml中必须使用许可"android.permission.internet",否则会出web page not available错误
js开放设置: 如果访问的页面中有javascript,则webview必须设置支持javascript。webview.getsettings().setjavascriptenabled(true); 否则,页面的js将不会起作用.
滚动条设置:this.setscrollbarstyle(scrollbars_outside_overlay);
设置缓存模式:setcachemode
2、事件监听对象(webviewclient)
事件监听对象webviewclient中,主要有如下几个常用方法:
shouldoverrideurlloading:在web页面里单击链接的时候,会自动调用android自带的浏览器来打开链接,需要通过该方法在本页面打开;
@override
public boolean shouldoverrideurlloading(webview view, string url) {
view.loadurl(url);
return true;
}
onloadresource:加载资源时响应
onpagestart:在加载页面时响应
onpagefinish:在加载页面结束时响应
onreceiveerror:在加载出错时响应
onreceivedhttpauthrequest:
3、返回处理
如果不做任何处理,浏览网页,点击系统“back”键,整个browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前activity中处理并消费掉该back事件。
public boolean onkeydown(int keycode, keyevent event) {
if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) {
mwebview.goback();
return true;
}
return super.onkeydown(keycode, event);
}
4、支持javascripte自定义对象
可以通过addjavascriptinterface()方法,添加js自定义对象,使用web页面与手机java程序能够进行通信交互。
5、downloadlistener接口
该接口里面有一个方法,ondownloadstart()下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,downloadmanagercore对象会调用客户代码中实现的downloadlistener方法。
6、几个注意点
1)为了让webview从apk文件中加载assets,android sdk提供了一个schema,前缀为"file:///android_asset/"。webview遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addjavascriptinterface方法中要绑定的java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 handler的目的(今天我是在没有在handler中处理,所以导致webviewclient中的onpagestart方法与addjavascriptinterface中的方法起了冲突,二个人的执行顺序时常互换,之后改成handlder实现,就解决其中的问题,正确的顺序是onpagestart在addjavascriptinterface中的handlder事件处理之前执行)。