欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android使用webwiew载入页面使用示例(Hybrid App开发)

程序员文章站 2023-10-28 20:27:22
hybrid app 是混合模式应用的简称,兼具 native app 和 web app 两种模式应用的优势,开发成本低,拥有 web 技术跨平台特性。目前大家所知道的基...

hybrid app 是混合模式应用的简称,兼具 native app 和 web app 两种模式应用的优势,开发成本低,拥有 web 技术跨平台特性。目前大家所知道的基于中间件的移动开发框架都是采用的 hybrid 开发模式,例如国外的 phonegap、titanium、sencha,还有国内的 appcan、rexsee 等等。hybrid app 开发模式正在被越来越多的公司和开发者所认同,相信将来会成为主流的移动应用开发模式。

hybrid app 融合 web app 的原理就是嵌入一个webview组件,可以在这个组件中载入页面,相当于内嵌的浏览器,代码如下:

复制代码 代码如下:

import android.app.activity;
import android.os.bundle;
import android.webkit.websettings;
import android.webkit.webview;

public class aactivity extends activity{

    @override
    public void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        // 创建webview
        webview webview= new webview(this);
        // 切换到内容视图
        setcontentview(webview);
        // 获取webview配置
        websettings ws = webview.getsettings();
        // 启用javascript
        ws.setjavascriptenabled(true);
        // 载入assets目录下的一个页面
        webview.loadurl("file:///android_asset/www/bobox/index.html");
    }
}

还有另一种引入方式是在布局文件中添加 webview 组件,代码如下:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">   
    <webview 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/webview"
        />       
</linearlayout>

复制代码 代码如下:

import android.app.activity;
import android.os.bundle;
import android.webkit.websettings;
import android.webkit.webview;

public class bactivity extends activity{

    @override
    public void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.webview);
        // 查找webview
        webview webview = (webview) findviewbyid(r.id.webview);
        // 获取webview配置
        websettings ws = webview.getsettings();
        // 启用javascript
        ws.setjavascriptenabled(true);
        // 在载入assets目录下的一个页面
        webview.loadurl("file:///android_asset/www/index.html");
    }
}

webview 还有一个非常重要的方法——addjavascriptinterface,可以用来实现 java 程序和 javascript 程序的相互调用,代码如下:

复制代码 代码如下:

webview.addjavascriptinterface(new object(){
    public void clickonandroid(){
        mhandler.post(new runnable(){
            public void run(){
                webview.loadurl("javascript:wave()");
            }
        });
    }
}, "demo");

页面代码如下:

复制代码 代码如下:

<script>
    function wave() {
        document.getelementbyid("id").innerhtml = "hello world!";
    }
</script>
</head>
<body>
    <div>
        <a href="#" id="demo" onclick="window.demo.clickonandroid()">click me</a>
    </div>
</body>
</html>

这样,当你点击页面上 click me 按钮的时候就会调用 java 代码中的 clickonandroid 函数,clickonandroid 函数中又调用页面中的 wave 方法。需要注意的是:这个接口在 android 2.3 版本的模拟器中运行会导致 webview 崩溃,目前还没有修复。这是一个非常简单的演示 java 和 javascript 相互调用的例子,在实际应用中可以在页面调用的 clickonandroid 函数中再调用摄像头、通讯录、通知提醒等设备功能。