当前位置:  编程技术>移动开发

Android开发之WebView组件的使用解析

    来源: 互联网  发布时间:2014-10-11

    本文导语:  在 Android 手机中内置了一款高性能 webkit 内核浏览器, SDK 中封装为一个叫做 WebView 组件。 WebView 类是 WebKit 模块 Java 层的视图类,( 所有需要使用 Web 浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源...

在 Android 手机中内置了一款高性能 webkit 内核浏览器, SDK 中封装为一个叫做 WebView 组件。
WebView 类是 WebKit 模块 Java 层的视图类,( 所有需要使用 Web 浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源。目前,WebKit 模块支持 HTTP、HTTPS、FTP 以及 javascript 请求。
WebView 作为应用程序的 UI 接口,为用户提供了一系 列的网页浏览、用户交互接口,客户程序通过这些接口访问 WebKit 核心代码。 )

什么是 webkit
WebKit 是 Mac OS X v10.3 及以上版本所包含的软件框架(对 v10.2.7 及以上版本也可通过 软件更新获取) 同时,
WebKit 也是 Mac OS X 的 Safari 网页浏览器的基础。WebKit 是一个开源项目,主要由 KDE 的 KHTML 修改而来并且包含了一些来自苹果公司的一些组件。
传统上, WebKit 包含一个网页引擎 WebCore 和一个脚本引擎 JavaScriptCore,它们分别对应 的是 KDE 的 KHTML 和 KJS。
不过,随着 JavaScript 引擎的独立性越来越强,现在 WebKit 和 WebCore 已经基本上混用不分(例如 Google Chrome 和 Maxthon 3 采用 V8引擎,却仍然 宣称自己是 WebKit 内核) 。
这里我们初步体验一下在 android 是使用 webview 浏览网页,

SDK 的 Dev Guide 中有一个 在 WebView 的简单例子 。 在开发过程中应该注意几点: 1.AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出 Web page not available 错误。
2.如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript。 webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接, 如果希望点击链接继续在当前 browser 中响应, 而不是新开 Android 的系统browser 中响应该链接,必须覆盖 webview 的 WebViewClient 对象。
mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(/tech-mobile-dev/url/index.html); return true; } });
mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(/tech-mobile-dev/url/index.html); return true; } });
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个 Browser 会调用 finish()而结束自身,
如果希望浏览的网 页回退而不是推出浏览器,需要在当前 Activity 中处理并消费 掉该 Back 事件。
代码如下:

public boolean onKeyDown(int keyCode, KeyEvent event){
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

在tomcat上放一个漂亮页面
1.加载网页(加权限)
定义一个网址输入文本框,点按钮用webView打开这个网页
2.编写data字符串,webview.loadData(data,"text/html","UTF-8");
3.用dialog的setiem打开网址,前进,后退,放大,缩小,清历史。
4.用HTML定义开发界面。file:/android_asset/a.html
代码如下:


function loadurl(){ }
< /script>
< select name="">


< /select>
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setBuiltInZoomControls(true);
webview.loadUrl(file:///...);

5.js对话框(用chom..)
代码如下:

function openAlert(){
window.alert("");
}
function openConfirm(){
if(window.confirm("是否删除此信息?")){
window.location="myjs.html";//-------------------!!!
}
}

< input type="submit" value="确认" onClick="openConfirm()">

java调js中的方法:
代码如下:

//在java中调用javascript方法要通过loadUrl()来进行,把要调用的方法作为loadUrl方法的字符串参数
settings.setJavaScriptEnabled(true);//设置在webview中可用js
webview.loadUrl("javascript:myprompt1()");

javascript中调java中的方法:(特别强调要用Android2.2版模拟器)
代码如下:

webview.addJavascriptInterface(new MyInterface(), "myobj");//第二步---注册在js中调用的对象名myobj
webview.loadUrl("file:///android_asset/test.html");
//第一步:定义要在js中调用的方法
class MyInterface{
public String getname(){
return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
}

------------javascript中:-----
代码如下:

function myinterface(){
document.getElementById("myname").innerHTML = window.myobj.getname() ;
}

WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。
WebView有几个可以定制的点:
(1)设置WebChromeClient子类,WebChromeClient会在一些影响浏览器ui交互动作发生时被调用,比如WebView关闭和隐藏、页面加载进展、js确认框和警告框、js加载前、js操作超时、webView获得焦点等等,详见WebChromeClient
(2)设置WebViewClient子类,WebViewClient会在一些影响内容喧嚷的动作发生时被调用,比如表单的错误提交需要重新提交、页面开始加载及加载完成、资源加载中、接收到http认证需要处理、页面键盘响应、页面中的url打开处理等等,详见WebViewClient
(3)设置WebSettings类,其中包含多项配置。WebSettings用来对WebView的配置进行配置和管理,比如是否可以进行文件操作、缓存的设置、页面是否支持放大和缩小、是否允许使用数据库api、字体及文字编码设置、是否允许js脚本运行、是否允许图片自动加载、是否允许数据及密码保存等等,详见WebSettings
(4)设置addJavascriptInterface方法,将java对象绑定到webView中,以方便从页面js中控制java对象, 实现用本地java代码和html页面进行交互,甚至可以进行页面自动化。但如此做存在安全隐患,所以若设置了此方法,请确保webView的代码都是自己完成,详细使用addJavascriptInterface进行自动化见本文5使用addJavascriptInterface完成和js交互
1、back键控制网页后退
Activity默认的back键处理为结束当前Activity,webView查看了很多网页后,希望按back键返回上一次浏览的页面,这个时候我们就需要覆盖onKeyDown函数,告诉他如何处理,如下:
代码如下:

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

其中webView.canGoBack()在webView含有一个可后退的浏览记录时返回true
webView.goBack();表示返回webView的上次访问页面
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。
网络内容:
1、LoadUrl直接显示网页内容(单独显示网络图片)
2、LoadData显示中文网页内容(含空格的处理)
APK包内文件:
1、LoadUrl显示APK中Html和图片文件
2、LoadData(loadDataWithBaseURL)显示APK中图片和文字混合的Html内容res/layout/main.xml
----------------------------------------------------------
当运行提示为web page not available时去清单文件中添加权限

URLUtil.isNetworkUrl(/tech-mobile-dev/String uri/index.html)方法用来判断用户输入的URL是否有效,如无效则会显示一个Toast信息框来提醒用户输入正确的URL
----------------------------------------------------------
步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl(/tech-mobile-dev/article-14484711034628145615.html)方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。

下面是具体的例子:
MainActivity.java
代码如下:

package com.android.webview.activity;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
//设置WebView属性,能够执行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
//加载需要显示的网页
webview.loadUrl("http://www.8way.com/");
//设置Web视图
webview.setWebViewClient(new HelloWebViewClient ());
}
@Override
//设置回退
//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); //goBack()表示返回WebView的上一页面
return true;
}
return false;
}
//Web视图
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(/tech-mobile-dev/url/index.html);
return true;
}
}
}

main.xml
代码如下:





在AndroidManifest.xml文件中添加权限














webview学习记录总结:
首先要在 manifest.main 文件中创建一个 webview,
然后再 activity 中定义这个 webview 然后 进行以下相关操作。
1、添加权限:AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出 Web page not available 错误。
2、在要Activity 中生成一个 WebView 组件:WebView webView = new WebView(this);
3、设置WebView 基本信息:
如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript。
webview.getSettings().setJavaScriptEnabled(true);
触摸焦点起作用 requestFocus(); 取消滚动条 this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4 如果希望点击链接由自己处理,而不是新开 Android 的系统 browser 中响应该链接。
给 WebView添加一个事件监听对象( WebViewClient)并重写其中的一些方法:
shouldOverrideUrlLoading:对网页中超链接按钮的响应。当按下某个连接时 WebViewClient会调用这个方法,
并传递参数:按下的 url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest
5、如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript ,否则显示空白页面。
Java 代码 webview.getSettings().setJavaScriptEnabled(true);
6、如果页面中链接,如果希望点击链接继续在当前 browser 中响应,而不是新开 Android 的系统 browser 中响应该链接,必须覆盖 webview 的 WebViewClient 对象: Java 代码 1.mWebView.setWebViewClient(new WebViewClient(){ 2. 3. 4. 5. 6. });
上述方法告诉系统由我这个 WebViewClient 处理这个 Intent,我来加载 URL。 点击一个链接的 Intent 是向上冒泡的,
shouldOverrideUrlLoading 方法 return true 表示我加载后这个 Intent 就消费了, 不再向上冒泡了。
7、 如果不做任何处理, 在显示你的 Brower UI 时, 点击系统“Back”键, 整个 Browser 会作为一个整体“Back" }
public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(/tech-mobile-dev/url/index.html); return true;
到其他 Activity 中,而不是希望的在 Browser 的历史页面中 Back。

    
 
 

您可能感兴趣的文章:

  • 商业Android的UI组件库 DroidUX
  • Android 组件库 CWAC
  • Android组件界面设计工具 DroidDraw
  • Android 组件库 DroidParts
  • android开发教程之view组件添加边框示例
  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享
  • Android的Service应用程序组件基本编写方法
  • Android开发之时间日期组件用法实例
  • android Gallery组件实现的iPhone图片滑动效果实例
  • Android图片轮播组件(多模式) android-image-indicator
  • Android实现动态切换组件背景的方法
  • Android开源组件小结
  • android WebView组件使用总结
  • android RadioButton和CheckBox组件的使用方法
  • Android Service(不和用户交互应用组件)案例分析
  • 深入理解Android组件间通信机制对面向对象特性的影响详解
  • Android组件间通信--深入理解Intent与IntentFilter
  • 解析ADT-20问题 android support library
  • android layout XML解析错误的解决方法
  • Android入门之TableLayout应用解析(一)
  • 解析:android 如何从JPEG生成BufferedImage
  • 基于Android XML解析与保存的实现
  • 基于android中读取assets目录下a.txt文件并进行解析的深入分析
  • 解析Android应用启动后自动创建桌面快捷方式的实现方法
  • Android入门之TableLayout应用解析(二)
  • 解析Android中string-array数据源的简单使用
  • 解析android创建快捷方式会启动两个应用的问题
  • 解析离线安装Eclipse的Android ADT开发插件的具体操作(图文)
  • CSS属性参考手册 iis7站长之家
  • 解析Android横竖屏切换的问题
  • 解析android中的帮助、about、关于作者、HELP等提示页面
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • android教程使用webview访问https的url处理sslerror示例
  • 关于Android WebView的loadData方法的注意事项分析
  • android控件之WebView控件缩小
  • Android webview与js交换JSON对象数据示例
  • Android的webview支持HTML5的离线应用功能详细配置
  • Unity3D游戏引擎实现在Android中打开WebView的实例
  • android webview 简单浏览器实现代码
  • android中WebView和javascript实现数据交互实例
  • 基于Android中Webview使用自定义的javascript进行回调的问题详解
  • android中webview控件和javascript交互实例
  • android WebView加载html5介绍
  • Android开发笔记之探秘WebView
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3