- 浏览: 117139 次
- 性别:
- 来自: 重庆
文章分类
最新评论
android:webView总结
大部分内容为网上整理其它高人的帖子,现只作整理,用于查看:
在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。
什么是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(url);
- return true;
- }
- });
mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); 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);
- }
public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有
window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
看一个实例:
- public class WebViewDemo extends Activity {
- private WebView mWebView;
- private Handler mHandler = new Handler();
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.webviewdemo);
- mWebView = (WebView) findViewById(R.id.webview);
- WebSettings webSettings = mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- mWebView.addJavascriptInterface(new Object() {
- public void clickOnAndroid() {
- mHandler.post(new Runnable() {
- public void run() {
- mWebView.loadUrl("javascript:wave()");
- }
- });
- }
- }, "demo");
- mWebView.loadUrl("file:///android_asset/demo.html");
- }
- }
public class WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.webviewdemo); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } }
我们看addJavascriptInterface(Object obj,String
interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是
interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过
javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。
- <html>
- <mce:script language="javascript"><!--
- function wave() {
- document.getElementById("droid").src="android_waving.png";
- }
- // --></mce:script>
- <body>
- <a onClick="window.demo.clickOnAndroid()">
- <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
- Click me!
- </a>
- </body>
- </html>
<html> <mce:script language="javascript"><!-- function wave() { document.getElementById("droid").src="android_waving.png"; } // --></mce:script> <body> <a onClick="window.demo.clickOnAndroid()"> <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br> Click me! </a> </body> </html>
这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比
如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
这里还有几个知识点:
1)为了让WebView从apk文件中加载assets,Android
SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的
assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用
Handler的目的。
转载至:http://jaymsimusic.iteye.com/blog/747795
发表评论
-
Android Camera 使用小结
2012-03-06 17:07 1463Android Camera 使用小结 Android手 ... -
Android权限说明
2012-03-05 14:12 658程序执行需要读取到安全敏感项必需在androidma ... -
Android Bitmap和Canvas学习笔记
2012-03-05 11:45 759位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最 ... -
详解 Android 的 Activity 组件
2012-02-29 09:24 877Activity 的生命周期 和 J2ME 的 MI ... -
JNI技术与Android应用
2012-02-20 17:08 2783本文转自http://www.cnblogs.com/y ... -
如何发布打包并发布自己的Android应用(APP)
2012-02-20 15:30 757前面讲的都是关于And ... -
Android JNI知识简介
2012-02-16 17:33 794Java Native Interface (JNI)标准是j ... -
Android NDK: Host 'awk' tool is outdated.
2012-02-16 16:27 1163在使用Android NDK进行编译的时候可能会出现 Andr ... -
windows+eclipse+cygwin+cdt+ndk
2012-02-16 15:56 915代码下载 - 公共邮 ... -
解决Android自定义标题栏充满的问题
2012-02-15 10:27 806一个接着一个的activi ... -
WebView使用
2012-02-10 11:43 856WebView使用: Java代码 ... -
Android自定义title bar(标题栏)
2012-02-10 11:40 1225我们在开发程序是经常会需要软件全屏显示、自定义标题(使用按 ... -
Android应用开发中的风格和主题(style,themes)
2012-02-10 11:09 9735越来越多互联网企业都在Android平台上部署其客户端, ... -
Android 对话框(Dialog)大全 建立你自己的对话框
2012-02-10 10:03 775Activities提供了一种方便管理的创建、保存、回复 ... -
PerferenceActivity用法
2012-02-10 10:01 985看到很多书中都没有 ... -
Serializable 和 Parcelable 区别
2012-02-07 17:18 980android 中自定义的对象 ... -
Android中Intent传递对象的两种方法(Serializable,Parcelable)
2012-02-07 17:16 789转载自 http://blog.csdn.net/xyz ... -
Android拟器不能正常上网
2012-01-19 11:18 886启动模拟器后,可能模拟器不能正常上网,需要对模拟器进行设 ... -
Android平台常见属性集合
2012-01-19 10:56 904属性 值 说明 ... -
Android平台常见属性集合
2012-01-19 10:42 1属性 值 说明 android:orientation hor ...
相关推荐
总结来说,这个实例展示了如何使用Android Studio 3.1.2创建一个基于WebView的本地HTML登录界面。通过JavaScript接口,我们可以让HTML和Java代码相互通信,从而实现登录功能。在实际应用中,可能还需要考虑更多的...
本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...
总结来说,实现Android WebView调用系统相机的功能涉及以下步骤: 1. 添加必要的权限到`AndroidManifest.xml`。 2. 创建一个自定义的WebViewClient,实现调用相机的接口。 3. 在网页中通过JavaScript调用这个接口。 ...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大...
总结,Android的WebView结合JavaScriptInterface可以实现丰富的功能,包括与系统相机和相册的交互。通过Java代码处理相机拍照和相册选择的逻辑,然后通过JavaScript将图片数据传递回WebView进行展示,为用户提供更...
在Android开发中,Webview是一个重要的组件,它允许我们在原生应用中内嵌网页内容,提供混合式应用的用户体验。然而,在使用Webview时,有时会遇到一个问题:当HTML页面中包含`<input type="file">`用于上传文件的...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。有时候,我们不仅需要在Android代码中调用JavaScript,还需要让JavaScript能够反过来调用Android的Java方法,这种交互被...
在Android开发中,WebView是一个非常重要的组件,它允许开发者在应用程序中嵌入网页内容并实现与网页的交互。WebView基于WebKit内核,它的表现与Firefox类似,因此在开发时通常会在Firefox上进行预览和测试,以确保...
总结,Android的WebView组件提供了丰富的功能,能够加载远程和本地资源,同时支持缓存机制,提高用户体验。开发者需要根据实际需求调整其配置和行为,以实现最佳的加载效果和性能。在处理图片资源时,特别要注意路径...
总结起来,Android的WebView提供了一种灵活的方式让JavaScript和Java代码进行通信,这对于构建混合型应用或者在App中实现复杂交互功能非常有用。通过理解并熟练掌握JavaScript Interface的使用,开发者可以充分利用...
总结,Android WebView是构建混合应用或展示网页内容的强大工具。通过学习和理解上述知识点,你可以创建一个功能丰富的Web应用程序,并与网页内容进行深度交互。记得在实际开发中,还要关注性能优化和用户体验提升,...
总结,WebView是Android开发中的重要工具,能够帮助我们构建混合型应用,结合本地和Web功能。理解并熟练使用WebView的相关设置、事件处理和JavaScript交互,对于提升Android应用的功能性和用户体验具有重要意义。
总结来说,尽管提供的资源可能过时,但我们仍然可以从中学到关于Android Webview的基本知识,包括如何使用WebView加载网页、与JavaScript交互,以及如何进行性能优化和安全设置。对源码的理解有助于我们在实际开发中...
总结来说,"Android离线webview调试工具"是专为解决国内开发者在使用`chrome://inspect`时遇到的网络问题而生的利器。它提供了离线调试、跨机型兼容、实时更新等多种实用功能,让H5混合应用的开发变得更加便捷高效。...
### Android WebView 进度条相关知识点 #### 一、WebView简介 WebView是Android中的一个重要组件,它能够将网页内容嵌入到应用中显示。通过使用WebView,开发者可以在自己的应用程序里加载并显示HTML页面,这对于...
在Android应用程序开发中,WebView是不可或缺的一部分,它允许在应用内部加载和显示网页内容。然而,WebView也成为了安全问题的重灾区,因为它可能被攻击者利用来实施各种攻击。以下是一份详细的Android WebView安全...
总结: 在Android Webview中实现文件选择,包括拍照和从相册选取图片,需要监听`WebChromeClient`并处理文件选择器的结果。同时,结合百度定位服务,可以提供实时的位置信息,使得应用更具交互性和实用性。最后,...
总结一下,这个教程展示了如何在Android的WebView中加载HTML外部文件,并监听HTML中的操作。当用户点击电话链接时,我们的应用会响应并启动拨打电话的界面。通过这样的方式,我们可以利用WebView将HTML与Android原生...
在Android应用开发中,"用原生webView...总结,用原生webView开发的安卓壳子是一种高效且灵活的方法,尤其适合快速构建基于网页的应用。但同时也需要注意性能优化、安全性和用户体验的提升,确保应用的稳定性和可靠性。
在Android开发中,Webview是一个非常重要的组件,它允许我们加载和显示网页内容。Webview不仅能够呈现HTML、CSS和JavaScript,还支持与原生Android应用进行交互,从而实现更丰富的功能。本教程将深入探讨如何在...