Android WebAPP开发入门

使用WebView开发web app

如果想发行一个web应用(或只包含网页)作为客户端的一部分,可以使用webview。WebView继承至View可以用于activity的布局来显示网页。但不包括一个完整网页浏览器的任何特征,例如:导航控制、地址栏等。默认的Webview所能做是显示一个网页。

使用WebView一个很有用的常见情况是:应用程序提供的一些信息可能需要更新,例如:最终用户协议、用户指南等。在这些情境下使用WebView可以使应用避免更新升级。在Android应用程序中,创建一个Activity包含WebView,可以使用它显示托管在网上的文档。

还有一种有用的情况是:应用程序向用户提供数据总是需要请求一个网络连接来检索数据,例如:电子邮件。这种情况下,你可以发现使用WebView来显示网页和所有用户数据比起执行网络请求、解析数据、渲染布局要更简单。因此,可以设计一个适合Android设备的网页,然后在加载网页的Android应用程序中实现WebView。

在应用程序中添加WebView

在使用< WebView > 标签添加到布局中,如下:

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

WebView加载网页使用 loadUrl(),如下:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");

网页加载需要INTERNET权限,在AndroidManifest.xml文件中添加权限:

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>
在WebView中使用JavaScript

如果计划在WebView中使用JavaScript加载网页,需要启用JavaScript。一旦JavaScript启用,就可以在应用程序代码和JS代码之间创建接口。

WebView默认不启用JavaScript。启用如下:

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
JS 与Android交互

当开发一个专门为WebView在Android应用程序中设计的Web应用程序时,可以在JavaScript代码和客户端Android代码之间创建接口。例如:JS调用一个Android的方法来显示一个对话框,而不是使用JS的alert()函数。
通过addJavascriptInterface(),绑定JS与Android代码。如下:

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

注意:如果你的 targetSdkVersion 是17或更高,想要获得JS就必须给对应的Android方法(方法必须是public)添加@JavascriptInterface注解

使用addJavascriptInterface()绑定:

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
//这里的参数"Android",将在JS中由于调用Android方法,如:Android.showToast(toast);

网页通过JS方法调用Android:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>
处理页面导航

当用户从WebView中的网页点击链接时,默认行为是Android启动一个处理URL的应用程序。通常,默认的网页浏览器会打开并加载目标URL。但是,可以重写这种行为使网页在WebView中打开。
用户点击打开连接,只需为WebView提供一个WebViewClient,使用setWebViewClient():

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());

如果您希望更多地控制单击的链接加载的位置,创建自己的WebViewClient重写shouldOverrideUrlLoading() 方法,如下:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            // This is my web site, so do not override; let my WebView load the page
            return false;
        }
        // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
}

为WebView创建一个新的WebViewClient实例:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
网页浏览历史

当WebView覆盖URL加载时,它会自动累积访问过的网页的历史。通过goBack() 和goForward()可以再浏览历史中后退、前进。如下,当在Activity中按返回键时:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

如果用户存在实际的浏览记录canGoBack()返回true。同样使用canGoForward()检查是否有向前的历史。如果不检查,当用户到达历史结束的时候goBack()和GgoForward()就什么也做不了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值