Android WebView属性使用详解
来源:互联网 发布:美国eia数据公布 编辑:程序博客网 时间:2024/05/16 06:29
一、简单使用
1、直接打开浏览器使用
- Uri uri = Uri.parse("http://baidu.com");
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- //如果页面中使用了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、页面缩放
适应手机屏幕:
- webView.getSettings().setUseWideViewPort(true);
- webView.getSettings().setLoadWithOverviewMode(true);
- <pre name="code" class="java">webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
放大设置:
- webView.getSettings().setDisplayZoomControls(true);
无限放大:
webView.getSettings().setSupportZoom(true);
- webView.getSettings().setBuiltInZoomControls(true);
比例缩放:
- webView.setInitialScale(50);
2、页面缓存
缓存构成
- /data/data/package_name/cache/
- /data/data/package_name/database/webview.db
- /data/data/package_name/database/webviewCache.db
缓存模式(5种)
- 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.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
清除缓存
- clearCache(boolean)
- CacheManager.clear高版本中需要调用隐藏API。
控制大小
无系统API支持。
可选方式:定时统计缓存大小、按时间顺序删除缓存。
优先缓存
既然这些图片已经存在手机缓存里面了,为什么Webview不能再把它显示出来呢?这里我们需要设置下:
- WebSettings webSettings= webView.getSettings();
- webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
- //webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 默认不使用缓存!
3、前进后退
- webView.goBack();//返回上一个浏览页
一般用于重写返回键:
- 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标签显示
- webView.setWebChromeClient(new WebChromeClient(){
- @Override
- public void onReceivedTitle(WebView view, String title) {
- //可以使用TextView显示title标签
- super.onReceivedTitle(view, title);
- }
- });
5、文件下载
参考:Android WebView详解之文件下载
demo下载
6、错误页面
在加载页面时,有时会出现网络异常、地址不存在的错误问题,而默认的错误页面比较难看,这时需要加载自己设计好的页面。
- 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)页面中增加超链接
- <a href="file:///android_asset/www/main.html?cx">点击我</a>
- 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、加载进度显示
- /*
- * 需要自己定义一个进度条控件
- * 这里已经定义好了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常用方法:
- setAllowFileAccess 启用或禁止WebView访问文件数据
- setBlockNetworkImage 是否显示网络图像
- setBuiltInZoomControls 设置是否支持缩放
- setCacheMode 设置缓冲的模式
- setDefaultFontSize 设置默认的字体大小
- setDefaultTextEncodingName 设置在解码时使用的默认编码
- setFixedFontFamily 设置固定使用的字体
- setJavaSciptEnabled 设置是否支持Javascript
- setLayoutAlgorithm 设置布局方式
- setLightTouchEnabled 设置用鼠标激活被选项
- setSupportZoom 设置是否支持变焦
WebViewClient常用方法:
- doUpdate VisitedHistory 更新历史记录
- onFormResubmission 应用程序重新请求网页数据
- onLoadResource 加载指定地址提供的资源
- onPageFinished 网页加载完毕
- onPageStarted 网页开始加载
- onReceivedError 报告错误信息
- onScaleChanged WebView发生改变
- shouldOverrideUrlLoading 控制新的连接在当前WebView中打开
WebChromeClient常用方法:
- onCloseWindow 关闭WebView
- onCreateWindow 创建WebView
- onJsAlert 处理Javascript中的Alert对话框
- onJsConfirm处理Javascript中的Confirm对话框
- onJsPrompt处理Javascript中的Prompt对话框
- onProgressChanged 加载进度条改变
- onReceivedlcon 网页图标更改
- onReceivedTitle 网页Title更改
- onRequestFocus WebView显示焦点
0 0
- Android WebView属性使用详解
- Android WebView属性使用详解
- Android WebView属性使用详解
- Android WebView属性使用详解
- android - WebView基本属性使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- strcpy 拷贝问题
- 编译 cocos2d-x-3.13.1 程序:Android Studio (代码配置方法)
- oracle存储过程基本语法
- 编写程序,输出 200~500之间的所有素数
- iOS开发------iOS 10 由于权限问题导致崩溃的那些坑
- Android WebView属性使用详解
- GitHub
- Linux(Ubuntu)下安装使用git
- 编写程序解决“百钱买百鸡”问题
- JNI (三)
- 验证“鬼谷猜想
- javaEE笔记三:JavaBean属性
- JNI (二)
- 编程求 1~10000 之间的所有“完全数”