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

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] view
plain copy

 





webView.getSettings().setUseWideViewPort(true);  

webView.getSettings().setLoadWithOverviewMode(true);  

[java] view
plain copy

 





<pre name="code" class="java">webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);  


放大设置:



[java] view
plain copy

 





webView.getSettings().setDisplayZoomControls(true);  

无限放大:

webView.getSettings().setSupportZoom(true);

[html] view
plain copy

 





webView.getSettings().setBuiltInZoomControls(true);  

比例缩放:

[java] view
plain copy

 





webView.setInitialScale(50);  

    2、页面缓存

缓存构成

[html] view
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.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

 





clearCache(boolean)  

CacheManager.clear高版本中需要调用隐藏API。  

控制大小

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

优先缓存

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

[html] view
plain copy

 





WebSettings webSettings= webView.getSettings();  

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  

//webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 默认不使用缓存!  

    3、前进后退

[html] view
plain copy

 





webView.goBack();//返回上一个浏览页  

一般用于重写返回键:
   

[java] view
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] view
plain copy

 





webView.setWebChromeClient(new WebChromeClient(){  

    @Override  

    public void onReceivedTitle(WebView view, String title) {  

        //可以使用TextView显示title标签  

        super.onReceivedTitle(view, title);  

    }  

});  

     5、文件下载

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

        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] view
plain 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常用方法:

[html] view
plain copy

 





setAllowFileAccess 启用或禁止WebView访问文件数据  

setBlockNetworkImage 是否显示网络图像  

setBuiltInZoomControls 设置是否支持缩放  

setCacheMode 设置缓冲的模式  

setDefaultFontSize 设置默认的字体大小  

setDefaultTextEncodingName 设置在解码时使用的默认编码  

setFixedFontFamily 设置固定使用的字体  

setJavaSciptEnabled 设置是否支持Javascript  

setLayoutAlgorithm 设置布局方式  

setLightTouchEnabled 设置用鼠标激活被选项  

setSupportZoom 设置是否支持变焦  

WebViewClient常用方法:

[html] view
plain copy

 





doUpdate VisitedHistory 更新历史记录  

onFormResubmission 应用程序重新请求网页数据  

onLoadResource 加载指定地址提供的资源  

onPageFinished 网页加载完毕  

onPageStarted 网页开始加载  

onReceivedError 报告错误信息  

onScaleChanged WebView发生改变  

shouldOverrideUrlLoading 控制新的连接在当前WebView中打开  

WebChromeClient常用方法:

[html] view
plain copy

 





onCloseWindow 关闭WebView  

onCreateWindow 创建WebView  

onJsAlert 处理Javascript中的Alert对话框  

onJsConfirm处理Javascript中的Confirm对话框  

onJsPrompt处理Javascript中的Prompt对话框  

onProgressChanged 加载进度条改变  

onReceivedlcon 网页图标更改  

onReceivedTitle 网页Title更改  

onRequestFocus WebView显示焦点  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: