Android WebView属性使用详解
2016-01-29 13:41
645 查看
一、简单使用
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显示焦点
相关文章推荐
- 在MPAndroidChart库K线图的基础上画均线
- 在MPAndroidChart库K线图的基础上画均线
- Objective-C语法之基本数据类型
- Android Studio打包生成APK
- a different object with the same identifier value was already associated with th
- 转:hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted ob
- 解决eclipse启动时报错Unable to acquire application service
- iOS内存循环引用
- Android从服务器下载文件
- android mvp快速开发框架介绍(自动生成android代码工具介绍)
- 拥抱 Android Studio 之四:Maven 仓库使用与私有仓库搭建
- Android开发,如何使canvas画布背景色透明。
- 阅读《Android 从入门到精通》(19)——评分条
- 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
- android-Implementing Effective Navigation,Creating Swipe Views with Tabs
- Android之使用 Intent 传递对象(一)Parcelable 方式
- Android 开源项目分类汇总--1
- Android之使用 Intent 传递对象(一)Serializable 方式
- 支付宝推吱口令吸引聊天用户 被微信封杀
- 文章标题