Android Training学习笔记——WebView

来源:互联网 发布:廖雪峰python教程 编辑:程序博客网 时间:2024/04/26 11:00

转载请注明出处:http://blog.csdn.net/xroocky/article/details/50876476

WebView继承于View,它允许我们在一个Activity中的一部分展示一个Web页面

向App添加WebView

  1. Layout文件中添加如下代码:

    <?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" />
  2. 使用loadUrl()去加载一个Web页面

    WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");
  3. 使用loadData()去加载html的字符串

    WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadData(data, "text/html", "utf-8");

    根据安卓的API文档的话应该这样写,但是实际效果是中文会出现乱码,解决办法有如下两种:

    1. 改变参数:

      myWebView.loadData(data, "text/html; charset=utf-8", null);
    2. 更换方法:

      myWebView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
  4. 当然还要为App提供访问网络的权限

    <manifest ... ><uses-permission android:name="android.permission.INTERNET" />...</manifest>

在WebView中使用JavaScript

如果希望使用JavaScript必须要为WebView开启JavaScript。如果JavaScript被开启了,我们就可以在App代码和JavaScript代码之间创建接口

  1. 开启JavaScript

    WebView中,JavaScript是默认关闭的,我们需要在WebSettings中打开JavaScriptWebSettings还为我们提供了一些其他的有用方法,例如setUserAgentString(),可以让我们自己设置用户代理

    WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);
  2. 给Android代码绑定JavaScript代码
    我们需要调用WebViewaddJavascriptInterface()方法来进行绑定,对于该方法要为其传递一个接口的实例和一个字符串作为参数。
    创建如下的class:

    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或者更高,需要在那些希望在JavaScript中调用的方法前面加上@JavascriptInterface,而且这些方法必须是公共的。
    绑定过程如下,接口被命名为“Android“:

    WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(this), "Android");

    这时就可以在JavaScript代码中调用WebAPPInterface中的方法(并不需要在JavaScript中初始化WebAPPInterfaceWebView会自动完成这一切):

    <input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /><script type="text/javascript">    function showAndroidToast(toast) {        Android.showToast(toast);    }</script>

处理页面导航……

当用户在WebView中点击链接后,默认是启动浏览器去访问相应的URL,然而我们可以修改这个默认行为,让用户在我们的WebView中查看相应的跳转URL。为WebView提供一个WebViewClient就可以实现这个效果:

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

如果希望得到对相应跳转URL更多的控制,我们可以继承WebViewClient来创建自己的WebViewClient,例如:

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 myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new MyWebViewClient());

浏览历史

如果我们重写了URL Loading的话,浏览历史就会被自动记录下来,我们可以使用goBack()goForward()方法来实现前进和后退

@Overridepublic 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()方法是用来判断是否还有历史记录可以供使用者访问的,同样还有canGoForward()方法。

0 1
原创粉丝点击