您的位置:首页 > 移动开发

深入学习android WebView

2015-02-27 11:58 477 查看
WebView可以显示网页的控件。WebView的网页渲染引擎和Safari、Chrome一样都是Webkit。使用WebView进行互联网程序开发有以下优点:1、可以打开远程网址、也可以加载本地Html数据2、可以搭建Java和Javascript交互桥梁3、WebView控件可以高度定制。一、WebView加载各种类型的网页
[code]//打开本包内asset目录下的index.html文件
webView.loadUrl("file:///android_asset/index.html");
//打开本地sd卡内的index.html文件
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");
//打开指定URL的html文件
webView.loadUrl("http://m.oschina.net");
//打开html字符串
webView.loadDataWithBaseURL("about:blank",htmlStr,"text/html","utf-8",null);
二、常见webSetting属性设置
[code]WebSettingsetting=webView.getSettings();
setting.setJavaScriptEnabled(true);//开启Javascript支持
webview.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
setting.setLoadsImagesAutomatically(true);//设置可以自动加载图片
setting.setAppCacheEnabled(true);//应用可以有缓存
setting.setDomStorageEnabled(true);//设置可以使用localStorage
setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存
setting.setAppCacheMaxSize(10*1024*1024);//缓存最多可以有10M
setting.setAllowFileAccess(true);//可以读取文件缓存(manifest生效)
setting.setPluginsEnabled(true);//支持插件
[code]
setting.setUseWideViewPort(false);//将图片调整到适合webview的大小
setting.setSupportZoom(true);//支持缩放
setting.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//支持内容重新布局
setting.supportMultipleWindows();//多窗口
setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//关闭webview中缓存
setting.setAllowFileAccess(true);//设置可以访问文件
setting.setNeedInitialFocus(true);//当webview调用requestFocus时为webview设置节点
setting.setBuiltInZoomControls(true);//设置支持缩放
setting.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过JS打开新窗口
setting.setLoadWithOverviewMode(true);//缩放至屏幕的大小
setting.setLoadsImagesAutomatically(true);//支持自动加载图片
1、setLayoutAlgorithm()。让加载进来的界面页面的布局。LayoutAlgorithm是一个枚举用来控制页面的布局,有三个类型:NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度;NORMAL:正常显示不做任何渲染;SINGLE_COLUMN:把所有内容放大webview等宽的一列中,即让加载进来页面自适应手机屏幕分辨率并居中显示。2、setCacheMode()。设置缓存加载模式。也有三种:LOAD_CACHE_ELSE_NETWORK:缓存如果有,先加载缓存然后从网络加载;LOAD_NO_CACHE:不适用缓存,直接从网络加载;LOAD_CACHE_ONLY:使用缓存,不从网络上加载;LOAD_DEFAULT:默认缓存加载模式;LOAD_NORMAL:该类型已废弃使用。
三、
打开网页时不调用系统浏览器,
而是在本WebView中显示
[code]webView.setWebViewClient(newWebViewClient(){
@Override
publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){
view.loadUrl(url);
returntrue;
}
});
四、通过java代码调用javascript
[code]webView.loadUrl("javascript:javacalljs()");
//提供一个提供javascript调用的声明
webView.addJavascriptInterface(this,
"call");//javascript调用java代码<ahref=""onclick="window.call.startFunction()">点击调用java代码</a><br/>
[/code]五、按返回键时,不退出程序而是返回上一浏览页面
[code]publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if((keyCode==KeyEvent.KEYCODE_BACK)&&webView.canGoBack()){
webview.goBack();
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
六、打开页面时,自适应屏幕
[code]WebSettingswebSettings=mWebView.getSettings();
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true);
七、使页面支持缩放
[code]WebSettingswebSettings=mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
八、如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点
[code]webview.requestFocusFromTouch();
九、WebViewClient的方法全解
[code]doUpdateVisitedHistory(WebViewview,Stringurl,booleanisReload)//(更新历史记录)
onFormResubmission(WebViewview,MessagedontResend,Messageresend)//(应用程序重新请求网页数据)
onLoadResource(WebViewview,Stringurl)//在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
onPageStarted(WebViewview,Stringurl,Bitmapfavicon)//这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
onPageFinished(WebViewview,Stringurl)//在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
onReceivedError(WebViewview,interrorCode,Stringdescription,StringfailingUrl)//(报告错误信息)
onReceivedHttpAuthRequest(WebViewview,HttpAuthHandlerhandler,Stringhost,Stringrealm)//(获取返回信息授权请求)
onReceivedSslError(WebViewview,SslErrorHandlerhandler,SslErrorerror)//重写此方法可以让webview处理https请求。
onScaleChanged(WebViewview,floatoldScale,floatnewScale)//(WebView发生改变时调用)
onUnhandledKeyEvent(WebViewview,KeyEventevent)//(Key事件未被加载时调用)
shouldOverrideKeyEvent(WebViewview,KeyEventevent)//重写此方法才能够处理在浏览器中的按键事件。
shouldOverrideUrlLoading(WebViewview,Stringurl)
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: