Android WebView属性使用详解

来源:互联网 发布:美国eia数据公布 编辑:程序博客网 时间:2024/05/16 06:29

一、简单使用

1、直接打开浏览器使用
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Uri uri = Uri.parse("http://baidu.com");      
  2. Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
  3. startActivity(intent);  
2、使用WebView打开
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //如果页面中使用了JavaScript,不加改代码页面不显示。  
  2. webView.getSettings().setJavaScriptEnabled(true);  
  3. //加载页面时如果不加改代码,页面会跳转到系统自带浏览器显示。  
  4. webView.setWebViewClient(new WebViewClient(){  
  5.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  6.         view.loadUrl(url);  
  7.         return true;//返回值为true时在WebView中打开,为false时调用浏览器打开  
  8.     }  
  9. });  
  10. //显示页面  
  11. webView.loadUrl(“页面地址http:”);//网络地址http://,本地地址file:///  

二、常用属性

    1、页面缩放

适应手机屏幕:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.getSettings().setUseWideViewPort(true);  
  2. webView.getSettings().setLoadWithOverviewMode(true);  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <pre name="code" class="java">webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);  

放大设置:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.getSettings().setDisplayZoomControls(true);  

无限放大:

webView.getSettings().setSupportZoom(true);
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.getSettings().setBuiltInZoomControls(true);  

比例缩放:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.setInitialScale(50);  

    2、页面缓存

缓存构成

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /data/data/package_name/cache/  
  2. /data/data/package_name/database/webview.db  
  3. /data/data/package_name/database/webviewCache.db  

缓存模式(5种)

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据  
  2. LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。  
  3. LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式  
  4. LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.  
  5. 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。

清除缓存

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. clearCache(boolean)  
  2. CacheManager.clear高版本中需要调用隐藏API。  

控制大小

无系统API支持。
可选方式:定时统计缓存大小、按时间顺序删除缓存。

优先缓存

既然这些图片已经存在手机缓存里面了,为什么Webview不能再把它显示出来呢?这里我们需要设置下:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. WebSettings webSettingswebView.getSettings();  
  2. webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  
  3. //webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 默认不使用缓存!  

    3、前进后退

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.goBack();//返回上一个浏览页  
一般用于重写返回键:
   
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public boolean onKeyDown(int keyCode, KeyEvent event) {  
  2.     if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {  
  3.         webView.goBack();  
  4.         return true;  
  5.     } else {  
  6.         //结束当前页  
  7.         return super.onKeyDown(keyCode, event);  
  8.     }  
  9. }  

    4、Table标签显示

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.setWebChromeClient(new WebChromeClient(){  
  2.     @Override  
  3.     public void onReceivedTitle(WebView view, String title) {  
  4.         //可以使用TextView显示title标签  
  5.         super.onReceivedTitle(view, title);  
  6.     }  
  7. });  

     5、文件下载

参考:Android WebView详解之文件下载

        demo下载

     6、错误页面

在加载页面时,有时会出现网络异常、地址不存在的错误问题,而默认的错误页面比较难看,这时需要加载自己设计好的页面。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.setWebViewClient(new WebViewClient(){   
  2.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  3.                  view.loadUrl(url);  
  4.                  return true;  
  5.     }  
  6.                
  7.     //显示错误页面  
  8. <span style="white-space:pre">    </span>@Override  
  9.     public void onReceivedError(WebView view, int errorCode,  
  10.                 String description, String failingUrl) {  
  11.         // 静态页存放在assets文件夹下  
  12.         view.loadUrl("file:///android_asset/www/index.html");  
  13.         super.onReceivedError(view, errorCode, description, failingUrl);  
  14.     }  
  15. });   

当然在加载静态页部分也可以显示一张精美的错误也图片,方法是在布局文件中增加图片控件(默认隐藏),加载静态页部分改为隐藏WebView控件显示图片控件。

     7、自动登录

在已经登陆过的页面,跳过登录页。

参考:Android WebView详解之自动登录

     8、调用本地方法

在WebView页面上的按钮点击事件响应本地类中的方法。
参考:Android WebView详解之JS调用Java方法

    9、自定义协议拦截

该方法与8的功能基本相同,只是8中页面使用了JS,可能存在安全隐患(远程注入)问题。自定义协议的实现:
1)页面中增加超链接
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <a href="file:///android_asset/www/main.html?cx">点击我</a>  
2)在下面方法中增加判断链接地址尾部参数是否相等处理。
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. webView.setWebViewClient(new WebViewClient(){   
  2.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  3.         if(url.endsWith("?cx")){  
  4.                 Toast.makeText(MainActivity.this"点击了登录按钮!", Toast.LENGTH_SHORT).show();  
  5.                 return true;  
  6.         }  
  7.                 view.loadUrl(url);  
  8.                 return true;  
  9.     }  
  10. });   

    10、加载进度显示

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * 需要自己定义一个进度条控件 
  3.  * 这里已经定义好了progressBar 
  4.  */  
  5. webView.setWebChromeClient(new WebChromeClient(){  
  6.     @Override  
  7.     public void onProgressChanged(WebView view, int newProgress) {  
  8.         // TODO Auto-generated method stub  
  9.         if(newProgress < 100){  
  10.             //更新当前进度  
  11.             progressBar.setVisibility(View.VISIBLE);  
  12.             progressBar.setProgress(newProgress);  
  13.         }else{  
  14.             //加载完成因此进度条  
  15.             progressBar.setVisibility(View.GONE);  
  16.         }  
  17.         super.onProgressChanged(view, newProgress);  
  18.     }  
  19. });  

三、属性总结

WebSettings常用方法:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. setAllowFileAccess 启用或禁止WebView访问文件数据  
  2. setBlockNetworkImage 是否显示网络图像  
  3. setBuiltInZoomControls 设置是否支持缩放  
  4. setCacheMode 设置缓冲的模式  
  5. setDefaultFontSize 设置默认的字体大小  
  6. setDefaultTextEncodingName 设置在解码时使用的默认编码  
  7. setFixedFontFamily 设置固定使用的字体  
  8. setJavaSciptEnabled 设置是否支持Javascript  
  9. setLayoutAlgorithm 设置布局方式  
  10. setLightTouchEnabled 设置用鼠标激活被选项  
  11. setSupportZoom 设置是否支持变焦  

WebViewClient常用方法:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. doUpdate VisitedHistory 更新历史记录  
  2. onFormResubmission 应用程序重新请求网页数据  
  3. onLoadResource 加载指定地址提供的资源  
  4. onPageFinished 网页加载完毕  
  5. onPageStarted 网页开始加载  
  6. onReceivedError 报告错误信息  
  7. onScaleChanged WebView发生改变  
  8. shouldOverrideUrlLoading 控制新的连接在当前WebView中打开  

WebChromeClient常用方法:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. onCloseWindow 关闭WebView  
  2. onCreateWindow 创建WebView  
  3. onJsAlert 处理Javascript中的Alert对话框  
  4. onJsConfirm处理Javascript中的Confirm对话框  
  5. onJsPrompt处理Javascript中的Prompt对话框  
  6. onProgressChanged 加载进度条改变  
  7. onReceivedlcon 网页图标更改  
  8. onReceivedTitle 网页Title更改  
  9. onRequestFocus WebView显示焦点  
0 0
原创粉丝点击