稻草人总结之WebView的介绍
来源:互联网 发布:手机ui界面设计软件 编辑:程序博客网 时间:2024/05/22 06:29
- 因为要访问网络,所以manifest中必须要加uses-permission:
<uses-permission android:name="android.permission.INTERNET"/>
WebView
WebView是一个基于webkit引擎、展现web页面的控件
WebView 是一个可以显示网页的控件,他的网页渲染引擎和Safari、Chrome一样都是Webkit(一个开源的浏览器引擎)
作用:
•显示和渲染Web页面
•直接使用html文件(网络上或本地assets中)作布局
•可和JavaScript交互调用
1.1 优势:使用WebView来开发应用,有几个很明显的优势:
1、搭建Java和Javascript之间交互的桥梁。
2、跨平台,网页代码编写一次,即可以在任何支持web的平台上运行,如adnroid iphone win节省开发成本,提高开发效率。
3、资源利用最大化,web开发人员只用很少的学习成本即可以使用WebView开发。
4、应用程序维护成本大大降低,只用维护服务器端代码即可
1.2WebView的使用
WebView加载页面
1:LoadUrl(String url);直接加载网页、图片并显示(互联网用)
如果是在assets 目录下:地址为file:///android_asset/jstest.html
(本地用)
2:有时候我们的webview可能只是html片段,而不是一个完整的网页,事实上绝大多数时候都是如此,完整的网页无需做成应用,而直接在浏览器访问。
这种情况我们使用 LoadData 或者 loadDataWithBaseURL方法,后者用的最多:
*loadData(String data, String mimeType, String encoding):data 为 html 代码内容
如:mWebView.loadData(data, "text/html;charset=utf-8", null);
*webView.loadDataWithBaseURL():直接加载本地信息
loadDataWithBaseURL()比loadData()多两个参数,可以指定HTML代码片段中相关资源的相对根路径,也可以指定历史Url,其余三个参数相同
mWebView.loadDataWithBaseURL(“http://www.jcodecraeer.com", body, "text/html", “utf-8",null);
1.3Webview的最常用的子类
(WebSettings类、WebViewClient类、WebChromeClient类)
WebSettings
用来对WebView做各种设置, 你可以这样获取WebSettings
js处理
- setJavaScriptEnabled(true); //支持js
- setPluginsEnabled(true); //支持插件
- setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
缩放处理
- setUseWideViewPort(true); //将图片调整到适合webview的大小
- setLoadWithOverviewMode(true); // 缩放至屏幕的大小
- setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
- setBuiltInZoomControls(true); //设置内置的缩放控件。 这个取决于setSupportZoom(), 若setSupportZoom(false),则该WebView不可缩放,这个不管设置什么都不能缩放。
- setDisplayZoomControls(false); //隐藏原生的缩放控件
内容布局
- setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
- supportMultipleWindows(); //多窗口
- .stopLoading()停止加载页面
文件缓存
- setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
- setAllowFileAccess(true); //设置可以访问文件
- setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
- 除了当前访问记录.clearFormData () //这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据。
clearHistory ();//清除当前webview访问的历史记录,只会webview访问历史记录里的所有记录
clearCache(true);//清除网页访问留下的缓存,由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序
其他
- setLoadsImagesAutomatically(true); //支持自动加载图片
- setDefaultTextEncodingName(“utf-8”); //设置编码格式
- setPluginState(PluginState.OFF); //设置是否支持flash插件
- setDefaultFontSize(20); //设置默认字体大小
- goBcak canGoBack goForward canGoForward//设置后退,前进
WebViewClient
主要帮助WebView处理各种通知、请求事件(例如,点击链接时候如何显示界面,页面开始加载,加载完毕之后有何动作等)
webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //页面开始加载时 super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { //页面加载结束时 super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); // 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断, } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); //在当前的webview跳转到新连接,可以进行网页拦截2.调用系统浏览器跳转到新网页 Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); return true;}}
WebChromeClient
辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // 获得网页的加载进度 newProgress为当前加载百分比 super.onProgressChanged(view, newProgress); if (newProgress < 100) { String progress = newProgress + "%"; progress.setText(progress); } else { }} @Override public void onReceivedTitle(WebView view, String title) { // 获取网页的title,客户端可以在这里动态修改页面的title // 另外,当加载错误时title为“找不到该网页” super.onReceivedTitle(view, title); titleview.setText(title);} });
常见用法:设置WebView缓存
//优先使用缓存:WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//缓存模式如下:
//LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
//LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
//不使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
清除缓存数据
/清除网页访问留下的缓存//由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
Webview.clearCache(true);
//清除当前webview访问的历史记录
//只会webview访问历史记录里的所有记录除了当前访问记录
Webview.clearHistory();
//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
Webview.clearFormData();
常见用法:Back键控制网页后退
webview是否可以返回到上一页面 webView.canGoBack()•webview返回到上一页面 webView.goBack();
•webview是否可以前进 webView.canGoForward()
•webview前进 webView.goForward();
//以当前的index为起始点前进或者后退到历史记录中指定的steps
//如果steps为负数则为后退,正数则为前进
webview.goBackOrForward(intsteps)
问题:在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身
•目标:点击返回后,是网页回退而不是退出浏览器
•解决方案:在当前Activity中处理并消费掉该 Back 事件
public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event);}
如何避免WebView内存泄露?
//在 Activity 销毁( WebView )的时候,先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。@Override protected void onDestroy() { if (mWebView != null) { mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); mWebView.clearHistory(); ((ViewGroup) mWebView.getParent()).removeView(mWebView); mWebView.destroy(); mWebView = null; } super.onDestroy(); }
一。WebView里,JS调用Java
webView.addJavascriptInterface(Object obj, String interfaceName)//
把java类注册成javascript对象,以便调用;参数一:要调用的对象,参数二:x需要被js调用的对外接口名
在Android4.0以后版本需要添加
@android.webkit.JavascriptInterface
mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");JSInterface对象:public class JSInterface {@JavascriptInterfacepublic void methodA() {}@JavascriptInterfacepublic void methodB(String webMessage) {}}
在javaScript中如果调用java的方法,需要写这样的代码
javascript:window.javaCode.toast(uname);
//javaCode是对象名,toast是对象要调用的方法
二。WebView里,Java调用JS
webView.loadUrl("javascript:js函数名 ")
确保当前已经加载html页面,然后用该方法
- 稻草人总结之WebView的介绍
- 稻草人总结之Image-Loader加载图片
- 稻草人总结之关于二次采样
- 稻草人的程序之路--XML文档数据的遍历
- 稻草人的程序之路--构建简单散列表
- 稻草人
- 稻草人
- 稻草人
- webView之介绍
- android之WebView控件的使用方法总结
- iOS之WebView的使用总结
- WebView的详细介绍
- WebView的介绍
- WebView的详细介绍
- 稻草人的程序之路--函数参数中非引用,引用和const限定符的使用.
- 稻草人的程序之路--自绘按钮的类封装
- ARMBoot-1.1.0 在 mini2440 开发板上的移植 之稻草人手记
- WebView的使用方法总结
- python中counter()记数
- SpannableString同时设置ClickableSpan和ForegroundColorSpan时ForegroundColorSpan不生效的解决办法
- HDU
- Ubuntu编码服务器搭建--续(eCos编译问题)
- IO流(三)文件流
- 稻草人总结之WebView的介绍
- 指定版本安装selenium(python)
- 8.14
- Codeforces 839 D. Winter is here 容斥
- USACO Section 1.3 Combination Lock
- 8.14
- 7834:分成互质组
- 机器学习之Grid World的Monte Carlo算法解析
- Java mail发送邮件