Android WebView 的基本使用

来源:互联网 发布:考研上海师范大学 知乎 编辑:程序博客网 时间:2024/06/05 21:49

1.介绍webView

WebView是Android中提供用来浏览网页的控件,WebView的引擎是webKit,只是在高低版本使用的不同内核的webKit,在Android4.4后直接使用了Chrome。

2.作用

1.用来展示网页2.可以直接是本地的(或者远程的)html来布局

3.简单的使用

一.webview是一个组件,创建方法有两种1.直接在xml中布局2.直接new一个WebView添加到布局中二.webView的状态webview有正常浏览网页状态、暂停状态、销毁状态1.webview.onResume();//正常浏览网页状态2.webview.onPause();//暂停状态 会停止所有的动作,DOM的解析,插件的执行,JavaScript的执行webview.pauseTimers();//停止所有webView的layout, 怕热sing, JavaScripttimer,降低CPU功耗webview.resumeTimer();//恢复pauserTimer状态三.配置webview配置webview可以使用webSettings这个子类来完成//获取WebSettings对象WebSettings settings = webview.getSettings();//是否支持JavaScript的交互settings.setJavaSciptEnabled(true);//设置自适应屏幕,两者合用settings.setUseWideViewPort(true); //将图片调整合适webview的大小settings.setLoadWithOverviewMode(true); //缩放至屏幕的大小//缩放操作settings.setSupportZoom(true); //支持缩放,settings.setBuiltInZoomControls(true); //设置内置缩放控件settings.setDisplayZoomControls(false); //隐藏原生的缩放控件settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存settings.setAllowFileAccess(true); //设置可以访问文件settings.setJavaScriptCanOpenWindowsAutomtically(true); //支持通过JS打开新窗口settings.setLoadsImagesAutomatically(true); //支持自动加载图片settings.setDefaultTextEncodingName("utf-8"); //设置默认编码格式setCacheMode有四种加载模式1.WebSettings.LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据2.WebSettings.LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据3.WebSettings.LOAD_NO_CACHE: 不使用缓存,只从网络获取数据4.WebSettings.LOAD_CACHE_ELSE_NETWORK: 只要本地有,无论是否过期,获取no-cache,都使用缓存中的数据。WebView在加载数据时,会在data/data/包名目录下生成database和cache两个文件夹。URL记录保存在WebViewCache.db中,URL中的内容保存在WebViewCache文件夹下结合离线加载if(判断网络){    //网络可用时,从网络上加载    settings.setCacheMode(WebSettings.LOAD_DEFAULT);} else{    //网络不可用时,从本地加载数据    settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}//一些其他设置settings.setDomStorageEnabled(); //开启DOM storage API功能settings.setDatabaseEnabled(); //开启database storage API功能settings.setAppCacheEnabled(); //开启 Application Caches功能settings.setAppCachePath(""); //设置Application caches的缓存目录每一个Application 只调用一次setAppCachePath(),setAppCacheMaxSize();四.处理通知和请求事件webview.setWebViewClient(new WebViewClient(){                /*            * shouldOverrideUrlLoading            * 作用:打开网页时不调用系统浏览器,而是在本WebView中显示;在网页上的所有加载都经过这个            * 方法,这个函数我们可以做很多操作            * */            //在API21及以下,使用该方法            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                //使用webview进行加载                view.loadUrl(url);                //已处理,返回true                return true;            }            //在API21以上,使用该方法            @Override            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {                return super.shouldOverrideUrlLoading(view, request);            }            //作用: 开始载入页面调用的,我们可以设置一个loading的页面,告诉用户程序在等待网络响应。            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);                //设置记载开始的操作            }            //作用:在页面加载结束时调用。我们课可以关闭loading条,切换程序动作            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                //设置加载结束的操作            }            //作用:在加载页面资源是会调用,每一个资源(比如图片)的加载都会调用一次            @Override            public void onLoadResource(WebView view, String url) {                super.onLoadResource(view, url);                //设定加载资源的操作            }            //作用: 加载页面的服务器出现错误时(如404)调用。            /*            * App里面使用webview控件的时候遇到了诸如404这类的错误的时候,若是显示浏览器里面的那种错误            * 提示页面就显得很丑陋了,那么这个时候我们的app就需要架子啊一个本地的错误提示页面,即webview            * 如何加载一个本地的页面            * */            //在API23以下使用该方法            @Override            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {                super.onReceivedError(view, errorCode, description, failingUrl);                //步骤1:写一个html文件(error_handle.html),用于出错时显示个用户看的提示页面                //步骤2:将该html文件放置到代码根目录的assets文件夹下                //步骤3:复写WebViewClient的onReceivedError方法                //该方法传回了错误码,根据错误类型可以进行不同的错误分类处理/*                switch (errorCode){                    case HttpStatus.SC_NOT_FOUND:                        view.loadUrl("file:///android_assets/error_handle.html");                        break;                }*/            }            //在API23以上,使用该方法            @Override            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {                super.onReceivedError(view, request, error);            }            //作用:处理https请求            //webView默认是不处理https请求的,页面显示空白,需要进行如下设置:            @Override            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {                super.onReceivedSslError(view, handler, error);                handler.proceed(); //表示等待证书响应                //handler.cancel(); //表示挂起连接,为默认方式                //handler.handleMessage(null); //可做其他处理            }});五.辅助WebView处理JavaScript的对话框,网址图标,网站标题等等 //设置WebChromeClient        mWebView.setWebChromeClient(new WebChromeClient(){            //作用:获得网页的加载进度并显示            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);            }            /*作用:获取Web页中的标题            * 每个网页的页面都有一个标题,比如www.baidu.com这个页面的标题即"百度一下,你就知道"            * 那么如何知道当前WebView正在加载的页面的title并进行设置呢*/            @Override            public void onReceivedTitle(WebView view, String title) {                super.onReceivedTitle(view, title);                mToolbar.setTitle(title);            }            // 由于设置了弹窗检验调用结果,所以需要支持js对话框            // webview只是载体,内容的渲染需要使用webviewChromClient类去实现            // 通过设置WebChromeClient对象处理JavaScript的对话框            //设置响应js 的Alert()函数            @Override            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {return super.onJsAlert(view, url, message, result);            }        });六.webview加载网页的几种方法loadUrl(String url); //可以是网络地址,也可以是本地地址loadUrl(String url, Map<String, String> additionalHttpHeaders);//可以是网络地址,也可以是本地地址, 添加头部 loadData(String data, String mimeType, String encoding); //data 是string数据, 格式, 编码格式loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl); //base的url地址, data数据, 格式, 编码格式, 历史记录url七.销毁webView在销毁webView时, 先将webview加载为null内容, 可以在此清理历史记录,然后移除webView,在销毁webview,最后在将webview置为nullwebview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); //加载null数据webview.clearHistory(); //清除历史记录webview.getParent().remove(webview); //移除webviewwebview.destroy(); //销毁webviewwebview = null; //将webview置为null

4.防止内存泄漏

.新建webview时在使用webView组件时,最好不要将webview写在xml中,而是直接new一个webviewcontext使用getApplicationContext();二.销毁时在销毁webView时, 先将webview加载为null内容, 可以在此清理历史记录,然后移除webView,在销毁webview,最后在将webview置为nullwebview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); //加载null数据webview.clearHistory(); //清除历史记录webview.getParent().remove(webview); //移除webviewwebview.destroy(); //销毁webviewwebview = null; //将webview置为null
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 下海去看见鲨鱼怎么办 牛拉肚子不吃草怎么办 柯基一直叫怎么办 阿拉斯加拆家该怎么办 时光小屋闪退怎么办 貔貅耳朵坏了怎么办 貔貅脚坏了怎么办 天猫扣了四分会怎么办 分班考试没考好怎么办 word撤销多了怎么办 定选合格后不去怎么办 光伏531新政怎么办 唐小僧理财爆雷怎么办 脂肪填充后凹陷怎么办 惠州光耀将军湖怎么办 民办教学许可证怎么办代办 大学学生证丢了怎么办 主任调岗我怎么办 岗位调动不想去怎么办 转岗后后悔了怎么办? aps语言证明没有怎么办 凉皮怎么办才好吃 手上青筋暴起怎么办 白色衣服染上色怎么办 学生向校长借钱怎么办 现在村干部打人怎么办 匿名举报被泄露怎么办 贫穷的生活该怎么办 党员不参加选举怎么办 香港买药被骗怎么办 香港过关被扣怎么办 在香港购物被骗怎么办 澳门过香港怎么办手续 去香港澳门怎么办流量 被香港海关检查怎么办 村主任选举失败怎么办 佳能相机卡住了怎么办 重整行装怎么办大讨论 痘印黑色素沉淀怎么办 后背都是痘印怎么办 遇到莆田系医院怎么办