WebView解析
WebView解析
WebView是一个基于Webkit的,相当于内置浏览器的强大功能的组件,WebView的使用这么分四步说明:添加组件,加载资源,属性设置,辅助功能。 一、WebView的添加同绝大多数控件一样,主要有两种添加方式:第一,类似于普通控件的定义,先在xml文件里添加webview控件,再通过findViewById()获得;第二种方式如下: WebView webView = new WebView(this); setContentView(webView); 二、WebView资源的加载主要有两种 网页的加载:webView,loadUrl("http://www.hzeduask.com"); //这里是全部域名 本地文件的加载:webView.loadUrl("file:///android_asset/aaa.html"); 文件放在目录下assets文件夹下,也可以加载sd卡本地html文件(file://不能少) 三、WebView属性设置 // 访问页面中有JavaScript,必须设置支持JavaScript webView.getSettings().setJavaScriptEnabled(true); // 启用WebView访问文件数据 webView.getSettings().setAllowFileAccess(true); // 设置支持缩放 webView.getSettings().setSupportZoom(true); webView.getSettings().setBuiltInZoomControls(true); // 设置缩放比例 webView.setInitialScale(35); // 设置是否显示网络图像---true,封锁网络图片,不显示 false----允许显示网络图片 webView.getSettings().setBlockNetworkImage(false); // 设置支持插件 webView.getSettings().setPluginsEnabled(true); // 将图片调整到适合WebView大小 webView.getSettings().setUseWideViewPort(true); // 支持多窗口 webView.getSettings().supportMultipleWindows(); // 设置自动加载图片 webView.getSettings().setLoadsImagesAutomatically(true); // 设置渲染优先级 webView.getSettings().setRenderPriority(RenderPriority.HIGH); // 设置默认字体大小 webView.getSettings().setDefaultFontSize(50); // 如果需要用户输入账号密码,必须设置支持手势焦点 webView.requestFocusFromTouch(); // 取消滚动条 webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); WebView缓存设置 setCacheMode()设置缓存模式,参数 WebSettings.LOAD_CACHE_ELSE_NETWORK---只要本地有,无论是否过期,都使用缓存数据;只要打开过一次就使用缓存数据 WebSettings.LOAD_CACHE_ONLY---只使用缓存 WebSettings。LOAD_NO_CACHE---不使用缓存 WebSettings.LOAD_DEFAULT---控制器决定是否从网络获取数据,无论如果都从网络获取数据,没有网络就报错 WebSettings.LOAD_NORMAL---同默认 // 设置缓存模式 webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // 启用缓存 webView.getSettings().setAppCacheEnabled(true); // 设置最大缓存容量---100M webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 100); 四、辅助方法的添加 1、WebViewClient主要为WebView处理各种通知、请求事件。setWebViewClient()该方法作用于点击链接时调用,点击跳转时,加载新的webview资源,并可以在加载前后添加操作,比如添加缓冲对话 框,该方法的作用使得点击链接的响应在WebView内执行,而不是手机浏览器。 webView.setWebViewClient(new WebViewClient() { //用于加载新WebView,返回true代表着用完就消费掉 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } //用于加载新Webview之前,一般在此加载缓冲区 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); showDialog(1); } //用于加载新Webview之后,一般在此消除缓冲区 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); removeDialog(1); } //加载错误时调用,一般提示错误信息 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); Toast.makeText(WebViewDemo.this, "页面加载错误...", Toast.LENGTH_SHORT).show(); } }); 2.WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等 webView.setWebChromeClient(new WebChromeClient(){ //打开新WebView时,设置加载进度,进度显示于最上方标题位置 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); WebViewDemo.this.setProgress(newProgress*100); } //设置新WebView的标题,显示于最上方标题位置 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); WebViewDemo.this.setTitle(title); } //创建新WebView,加载新资源,并设置 @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView child=new WebView(WebViewDemo.this); child.getSettings().setJavaScriptEnabled(true); child.getSettings().setAllowFileAccess(true); child.getSettings().setSupportZoom(true); child.getSettings().setBuiltInZoomControls(true); child.setInitialScale(35); child.getSettings().setBlockNetworkImage(true); child.getSettings().setPluginsEnabled(true); child.getSettings().setUseWideViewPort(true); child.getSettings().supportMultipleWindows(); child.getSettings().setLoadsImagesAutomatically(true); child.getSettings().setLoadWithOverviewMode(true); //通过WebViewTransport设置新WebView child.setWebChromeClient(this); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(child); resultMsg.sendToTarget(); return true; } }); 五、注意事项 1、WebView的使用需要添加网络权限 <uses-permission android:name="android.permission.INTERNET"/> 2、WebView的返回需要重写Activity的onKeyDown方法,使得回退返回至上一级,如果不重写,将会 完全退出,代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } |
WebView解析的更多相关文章
- 利用selenroid扩展uiautoamtor的webview解析能力
uiautomator是一个非侵入式框架,但是webview解析能力很弱.为了改进webview的支持,可以考虑把webdriver或者selenroid整合进来. 具体接入可参考:http://se ...
- flutter_html 和 WebView 解析html 和 build.gradle源码
一.flutter_html 涉及的 api 接口: http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=20 二.Flu ...
- Android webView解析URL参数
2015年6月18日 13:56:21 星期四 又当爹又当娘啊............ public void onPageFinished(WebView view, String url) { s ...
- android WebView详解,常见漏洞详解和安全源码
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 转载请注明出处:http://blog.csdn.net/se ...
- Android性能优化之利用LeakCanary检测内存泄漏及解决办法
前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...
- 使用HTML来生产Android界面
使用HTML来生产Android界面 (2013-03-11 17:50:39) 转载▼ 分类: Android 1. HTML 开发软件界面 因为android软件开发分工目前还没有细化,程 ...
- 用Jsoup实现html中img标签地址替换
做app的时候经常要用webview解析Html,如果是自己写的服务器那么富文本编辑框有可能选择像KindEditor这样的编辑器,在kindEditor添加图片虽然可以实现绝对路径插入,如果说: & ...
- 收藏的技术文章链接(ubuntu,python,android等)
我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...
- APP中内嵌H5页面为什么不能下载?
在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...
随机推荐
- javase-->基础知识(三)
1.方法 普通方法:4个必要,1个可选 1):必须有返回值类型,没有返回值用void表示 2):必须有名字 3):必须有()和形参 4):必须有{}方法体 5):可选static,表示静态的方法,可以 ...
- php7 安装redis扩展
从pecl下载的phpredis扩展在make时报错,google了一下,解决办法,因为phpredis 有专门为php7的分支,所以先git clone phpredis下来 git clone h ...
- CentOS下yum安装LAMP
1. 用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用/etc/init.d/httpd start ...
- tp框架之模板继承
模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区 ...
- Delphi控件之---通过编码学习TStringGrid(也会涉及到Panel控件,还有对Object Inspector的控件Events的介绍
我是参考了万一的博客里面的关于TStringGrid学习的教程,但是我也结合自己的实际操作和理解,加入了一些个人的补充,至少对我有用! 学用TStringGrid之——ColCount.RowCoun ...
- 【疑难杂症系列01】TypeError: alert is not a function
一.背景 话说今天在调试js的时候,碰到一个很奇怪的问题,现记录一下.当使用alert()函数弹出提示时,总是报错,你没看错,alert函数报错了. 二.详细说明 当时正在做一个关于告警的页面展示功能 ...
- 攻城狮在路上(陆)-- 提交运行MapReduce程序到hadoop集群运行
此种方式不能直接在eclipse中调试代码. 首先需要在src下放置服务器上的hadoop配置文件:core-site.xml\yarn-site.xml\hdfs-site.xml\mapred-s ...
- ubuntu 14.04下spark简易安装
java安装 首先需要上oracle的网站下载 在lib目录下建立一个jvm文件夹 sudo mkdir /usr/lib/jvm 然后解压文件到这个文件夹 sudo tar zxvf jdk-8u4 ...
- CozyRSS开发记录19-窗口标题栏交互
CozyRSS开发记录19-窗口标题栏交互 1.谈谈对mvvm解耦的看法 在使用mvvm时,如何操作窗口,这是一个问题.这个问题的关键点是:mvvm是把view和viewmodel解耦了的,很多写法一 ...
- Redis 数据库入门指南
Redis 是一个开源数据库,它使用内存数据结构存储,可作为数据库.缓存和消息代理使用.Redis 支持丰富的数据结构,有:字符串(Strings).哈希(Hashs).列表(Lists).集合(Se ...