文档章节

android webView使用方法

QGlaunch
 QGlaunch
发布于 2015/06/17 15:52
字数 1124
阅读 64
收藏 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
博文 71
码字总数 12355
作品 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学习攻略(含与JS交互、缓存构建等)

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

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

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

carson_ho
04/19
0
0
Android Hybrid开发:这是一份详细 & 全面的WebView学习攻略

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

Carson_Ho
06/19
0
0
WebView深度学习(一)之WebView的基本使用以及Android和js的交互

前言:随着市场需求的不断变化,原生安卓已经无法满足客户的需要了,现在很多app都在使用Android和h5的交互实现某些功能,比如商品详情页,文章详情页面,商品点评页面,还有某些复杂的展示页...

aweiloveandroid
2017/07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

37. Sudoku Solver

Description tags: backtrack,hash table difficulty: hard Write a program to solve a Sudoku puzzle by filling the empty cells.A sudoku solution must satisfy all of the following......

52iSilence7
27分钟前
0
0
磁盘格式化、磁盘挂载和手动增加swap空间

9月26日任务 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间 4.5/4.6 磁盘格式化 #查看Linux所支持的文件格式 [root@zgxlinux-01 ~]# cat /etc/filesystems xfs...

zgxlinux
38分钟前
0
0
intellij idea中,鼠标拖动选择的是一块矩形区域

点“编辑”-->“列选择模式” 或者 按 Shift+Alt+Insert

hengbao5
40分钟前
0
0
中文地址

火力全開
55分钟前
0
0
71:循环之for、while、break、continue、exit

1、for循环语法: for 变量名 in 条件;do......;done 1:案例1:求1加到100的和: [root@localhost_02 for]# vim for1.sh #!/bin/bashsum=0for i in `seq 1 100`do sum=$[$sum...

芬野de博客
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部