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) {
   if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {

webView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

WebView解析的更多相关文章

  1. 利用selenroid扩展uiautoamtor的webview解析能力

    uiautomator是一个非侵入式框架,但是webview解析能力很弱.为了改进webview的支持,可以考虑把webdriver或者selenroid整合进来. 具体接入可参考:http://se ...

  2. flutter_html 和 WebView 解析html 和 build.gradle源码

    一.flutter_html 涉及的 api 接口: http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=20 二.Flu ...

  3. Android webView解析URL参数

    2015年6月18日 13:56:21 星期四 又当爹又当娘啊............ public void onPageFinished(WebView view, String url) { s ...

  4. android WebView详解,常见漏洞详解和安全源码

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  转载请注明出处:http://blog.csdn.net/se ...

  5. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

  6. 使用HTML来生产Android界面

    使用HTML来生产Android界面 (2013-03-11 17:50:39) 转载▼   分类: Android 1. HTML 开发软件界面   因为android软件开发分工目前还没有细化,程 ...

  7. 用Jsoup实现html中img标签地址替换

    做app的时候经常要用webview解析Html,如果是自己写的服务器那么富文本编辑框有可能选择像KindEditor这样的编辑器,在kindEditor添加图片虽然可以实现绝对路径插入,如果说: & ...

  8. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

  9. APP中内嵌H5页面为什么不能下载?

    在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...

随机推荐

  1. 【笔记】读取properties文件

    package com.bshinfo.el.userInfo.util; import java.io.BufferedReader; import java.io.File; import jav ...

  2. springMVC中 request请求数据绑定到Controller入参 过程剖析

    前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...

  3. wamp2.5 配置多端口虚拟主机

    1.保证httpd.conf下 Include conf/extra/httpd-vhosts.conf LoadModule php5_module "D:/E/php/wamp/bin/ ...

  4. thinkphp 3.2.3 session 丟失問題

    之前做的几个 站session在跨页时也不会丢失(都在同一台服务器,所以我排除了服务器配置问题),这次居然很奇怪的发生的,在火狐上有,在ie, 谷哥上没有session,看了很多网上的贴子 其中有一个 ...

  5. Jenkins+Maven+SVN快速搭建持续集成环境

    http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.htmlhttp://blog.csdn.net/pein_zero/art ...

  6. Linux deepin 下sublimes配置g++ openGL

    参考 :http://blog.csdn.net/u010129448/article/details/47754623 ubuntu 下gnome只要将代码中deepin-terminal改为gno ...

  7. ABP集合贴(转)

    ABP集合贴 本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所 ...

  8. Shell_1 简介

    1 Shell 变量 只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变. #!/bin/bash -x varName="AAA" echo ...

  9. 全局变量 HInstance 到底是在什么时候赋值的?

    在学习 资源文件 和 钩子函数 时, 经常用到当前模块句柄(HInstance)这个全局变量. 今天特别想知道, 它到底是在什么时候给赋值的. 输入 HInstance; "Ctrl+鼠标& ...

  10. ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略(转)

    asp.net UpdatePanel实现异步局部刷新 如有雷同,不胜荣欣,若转载,请注明 鉴于最近项目需要,研究了一下UpdatePanel控件的使用方法,现总结如下,可能有很多地方不足,还望大家斧 ...