Android WebView属性使用详解
2016-10-05 13:10
501 查看
一、简单使用
1、直接打开浏览器使用[java] view
plain copy
Uri uri = Uri.parse("http://baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
2、使用WebView打开
[java] view
plain copy
//如果页面中使用了JavaScript,不加改代码页面不显示。
webView.getSettings().setJavaScriptEnabled(true);
//加载页面时如果不加改代码,页面会跳转到系统自带浏览器显示。
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;//返回值为true时在WebView中打开,为false时调用浏览器打开
}
});
//显示页面
webView.loadUrl(“页面地址http:”);//网络地址http://,本地地址file:///
二、常用属性
1、页面缩放
适应手机屏幕:
[java] viewplain copy
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
[java] view
plain copy
<pre name="code" class="java">webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
放大设置:
plain copy
webView.getSettings().setDisplayZoomControls(true);
无限放大:
webView.getSettings().setSupportZoom(true);[html] view
plain copy
webView.getSettings().setBuiltInZoomControls(true);
比例缩放:
[java] viewplain copy
webView.setInitialScale(50);
2、页面缓存
缓存构成
plain copy
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
缓存模式(5种)
[html] view
plain copy
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
清除缓存
plain copy
clearCache(boolean)
CacheManager.clear高版本中需要调用隐藏API。
控制大小
无系统API支持。
可选方式:定时统计缓存大小、按时间顺序删除缓存。
优先缓存
既然这些图片已经存在手机缓存里面了,为什么Webview不能再把它显示出来呢?这里我们需要设置下:plain copy
WebSettings webSettings= webView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 默认不使用缓存!
3、前进后退
plain copy
webView.goBack();//返回上一个浏览页
一般用于重写返回键:
plain copy
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
} else {
//结束当前页
return super.onKeyDown(keyCode, event);
}
}
4、Table标签显示
[java] viewplain copy
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
//可以使用TextView显示title标签
super.onReceivedTitle(view, title);
}
});
5、文件下载
参考:AndroidWebView详解之文件下载
demo下载
6、错误页面
在加载页面时,有时会出现网络异常、地址不存在的错误问题,而默认的错误页面比较难看,这时需要加载自己设计好的页面。[java] view
plain copy
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
//显示错误页面
<span style="white-space:pre"> </span>@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// 静态页存放在assets文件夹下
view.loadUrl("file:///android_asset/www/index.html");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
当然在加载静态页部分也可以显示一张精美的错误也图片,方法是在布局文件中增加图片控件(默认隐藏),加载静态页部分改为隐藏WebView控件显示图片控件。
7、自动登录
在已经登陆过的页面,跳过登录页。参考:Android
WebView详解之自动登录
8、调用本地方法
在WebView页面上的按钮点击事件响应本地类中的方法。参考:Android
WebView详解之JS调用Java方法
9、自定义协议拦截
该方法与8的功能基本相同,只是8中页面使用了JS,可能存在安全隐患(远程注入)问题。自定义协议的实现:1)页面中增加超链接
[html] view
plain copy
<a href="file:///android_asset/www/main.html?cx">点击我</a>
2)在下面方法中增加判断链接地址尾部参数是否相等处理。
[java] view
plain copy
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.endsWith("?cx")){
Toast.makeText(MainActivity.this, "点击了登录按钮!", Toast.LENGTH_SHORT).show();
return true;
}
view.loadUrl(url);
return true;
}
});
10、加载进度显示
[java] viewplain copy
/*
* 需要自己定义一个进度条控件
* 这里已经定义好了progressBar
*/
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if(newProgress < 100){
//更新当前进度
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
}else{
//加载完成因此进度条
progressBar.setVisibility(View.GONE);
}
super.onProgressChanged(view, newProgress);
}
});
三、属性总结
WebSettings常用方法:
plain copy
setAllowFileAccess 启用或禁止WebView访问文件数据
setBlockNetworkImage 是否显示网络图像
setBuiltInZoomControls 设置是否支持缩放
setCacheMode 设置缓冲的模式
setDefaultFontSize 设置默认的字体大小
setDefaultTextEncodingName 设置在解码时使用的默认编码
setFixedFontFamily 设置固定使用的字体
setJavaSciptEnabled 设置是否支持Javascript
setLayoutAlgorithm 设置布局方式
setLightTouchEnabled 设置用鼠标激活被选项
setSupportZoom 设置是否支持变焦
WebViewClient常用方法:
plain copy
doUpdate VisitedHistory 更新历史记录
onFormResubmission 应用程序重新请求网页数据
onLoadResource 加载指定地址提供的资源
onPageFinished 网页加载完毕
onPageStarted 网页开始加载
onReceivedError 报告错误信息
onScaleChanged WebView发生改变
shouldOverrideUrlLoading 控制新的连接在当前WebView中打开
WebChromeClient常用方法:
plain copy
onCloseWindow 关闭WebView
onCreateWindow 创建WebView
onJsAlert 处理Javascript中的Alert对话框
onJsConfirm处理Javascript中的Confirm对话框
onJsPrompt处理Javascript中的Prompt对话框
onProgressChanged 加载进度条改变
onReceivedlcon 网页图标更改
onReceivedTitle 网页Title更改
onRequestFocus WebView显示焦点
相关文章推荐
- android - WebView基本属性使用详解
- Android WebView属性使用详解
- Android WebView属性使用详解
- Android WebView属性使用详解
- Android开发之WebView组件的使用详解
- android开发之WebView使用(非详解)
- Android webview使用详解
- Android学习指南之二十九:WebView使用详解
- Android——WebView组件的使用详解
- Android——WebView组件的使用详解
- Android开发_WebView组件使用详解_LoadUrl直接显示网页内容
- Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- Android客户端开发即WebView组件的使用详解
- Android——WebView组件的使用详解
- Android webview使用详解
- Android开发_WebView组件使用详解_LoadUrl直接显示网页内容
- Android webview使用详解
- Android开发之WebView组件的使用详解
- Android webview使用详解