Web View使用介绍(一)

南门宇
2023-12-01

Web View允许你创建自己的窗口用于浏览网页,甚至是开发一个自己的浏览器.以下是一个简单的例子:

1.创建一个名为HelloWebView工程.

2.打开res/layout/main.xml,插入以下内容:

<?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"
/>
3.打开 HelloWebView.java 文件,在这个类的开始定义WebView 对象:

WebView mWebView;

4.在onCreate方法里面使用以下代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl(http://www.google.com);
}
以上代码初始化了WebView对象,通过getSettings方法得到了一个WebSettings 对象,通过setJavaScriptEnabled方法使WebView支持Java script,最后通过loadUrl方法来导入网页.

5.由于应用程序需要访问网页,因此需要在 Android manifest 文件里面添加合适的权限:

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

6.同时也可以在manifest 文件里面去掉title bar,给webview更大的可视空间

<activity android:name=".HelloGoogleMaps" android:label="@string/app_name"
     android:theme="@android:style/Theme.NoTitleBar">

7.现在运行应用程序,我们创建了一个简单的网页观察器,但目前还不是一个浏览器,因为当你点击一个链接时,Android 默认的浏览器会处理浏览web页面的intent,为了让我们的activity能够处理自己的url请求,我们可以重写WebViewClient 类.

8.在HelloAndroid Activity中,创建一个内部类:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

9.在onCreate方法的末尾,设置HelloWebViewClient 的实例,作为一个WebViewClient :

mWebView.setWebViewClient(new HelloWebViewClient());

这样我们就创建了一个webview,这个webview可以处理任何通过这个webview选择的URL,并且加载到这个webview中,shouldOverrideUrlLoading方法传递当前的WebView 和URL请求.

如果再次运行应用程序,新的页面将会被加载进来,这样会有一个缺点:无法回到之前的页面上去,解决这个问题的办法是处理BACK键,让webview能够返回到之前的页面而不是退出程序.

10.为了处理BACK键,我们可以重写onKeyDown方法:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
当canGoBack方法返回true时,表明之前还有页面被加载过,可以返回到前一加载页面,如果为false,则退出程序.

 类似资料: