文档章节

android webView使用方法

QGlaunch
 QGlaunch
发布于 2015/06/17 15:52
字数 1124
阅读 68
收藏 2

在开发过程中应该注意几点: 
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true); 

3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。

方法/步骤

  1. [java] view plaincopyprint?
    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;

    }

    }); 

  2. 4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。


    [java] view plaincopyprint?
    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);


  3. 下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
    看一个实例:


    [java] view plaincopyprint?
    view plaincopy to clipboardprint?

    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");

    }


  4. 我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。www.cdtarena.com

    [html] view plaincopyprint?
    <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的目的。

  5. 总结:
    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、设置WevView要显示的网页:
    互联网用:webView.loadUrl("http://www.google.com"); 
    本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets文件中
    5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。
    给WebView添加一个事件监听对象(WebViewClient) 
    并重写其中的一些方法
    shouldOverrideUrlLoading:对网页中超链接按钮的响应。
    当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url 
    onLoadResource 
    onPageStart 
    onPageFinish 
    onReceiveError
    onReceivedHttpAuthRequest
    6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
    覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

    [java] view plaincopyprint?
    public boolean onKeyDown(int keyCoder,KeyEvent event){

    if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){

    webview.goBack(); //goBack()表示返回webView的上一页面

    return true;

    }

    return false;


本文转载自:http://jingyan.baidu.com/article/64d05a0298502dde54f73b6c.html

共有 人打赏支持
QGlaunch
粉丝 4
博文 76
码字总数 12568
作品 0
朝阳
私信 提问
Android UI开发之WebView简单使用

If you want to deliver a web application (or just a web page) as a part of a client application, you can do it using WebView. The WebView class is an extension of Android's View......

秋风醉了
2014/06/17
0
0
android webView 使用方法

一个WebView的简单例子 。 在开发过程中应该注意几点: 1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。 2.如果访问的页面中有Jav...

迷途d书童
2012/03/28
497
0
Android Hybrid开发:这是一份详细 & 全面的WebView学习攻略

前言 现在很多里都内置了Web网页(),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 那么这种该如何实现呢?其实这是里一个叫组件实现 今天,我将献上一份全面 & 详细的 攻略,含具体...

Carson_Ho
06/19
0
0
Android WebView:这是一份 详细 & 易懂的WebView学习攻略(含与JS交互、缓存构建等)

前言 现在很多里都内置了Web网页(),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 那么这种该如何实现呢?其实这是里一个叫组件实现 今天,我将献上一份全面 & 详细的 攻略,含具体...

Carson_Ho
05/21
0
0
Android WebView:这是一份全面 & 详细的WebView学习指南

前言 现在很多里都内置了Web网页(),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 那么这种该如何实现呢?其实这是里一个叫组件实现 今天,我将献上一份全面 & 详细的 攻略,含具体...

carson_ho
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

fabric增删改查Mac

备份1.3版本,重新下载1.1版本到fabric文件夹 /opt/gopath/src/github.com/hyperledger/fabric -> /opt/gopath/src/github.com/hyperledger/fabric1.3 新建/opt/gopath/src/github.com/hype......

八戒八戒八戒
6分钟前
1
0
盘点愚人节各大网站彩蛋,谁最爱恶搞?

如今的愚人节俨然已是各品牌宣传了一个重要节日,同时,也成为了各大互联网科技企业凑热闹,比拼创意和策划的节日。跟小编一起看看有哪些有趣的策划吧! Google地图变成吃豆人游戏 每年愚人节...

临江仙卜算子
30分钟前
2
0
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树...

java菜分享
31分钟前
1
0
玩手机与做实验

看过这样一个故事:说的是在二十世纪二十年代初的一个深夜,担任英国剑桥大学卡文迪许实验室主任的卢瑟福来实验室检查,发现一位学生还在做实验。卢瑟福就问他:“你上午做什么了?”学生回答...

Bob2100
今天
4
0
Kafka流式处理

Kafka Streams 初识流式处理 什么是数据流 数据流(也叫事件流)是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新记录会不断加...

东都大狼狗
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部