[译文]Web View - Android SDK Tutorials系列

Web View

WebView允许你创建自己的窗口来浏览网页(甚至是开发一个完整的浏览器)。本教程里,你将创建一个简单的Activity,能够浏览和导航网页。

  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;

    修改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");
    }

    通过Activity界面里的WebView元素来初始化成员WebView;调用getSettings()方法获得WebSettings对象,然后调用其setJavaScriptEnabled(boolean)方法设置WebView支持JavaScript。最后,调用loadUrl(String)方法加载一个初始网页。

  4. 因为这个应用要访问互联网,需要在Android manifest文件里设置相应的权限。打开AndroidManifest.xml 文件,将下面的内容添加为节点<manifest>的元素:
    <uses-permission android:name="android.permission.INTERNET" />
  5. 同时在manifest文件里,给Activity设置"NoTitleBar"主题去除标题栏,为网页显示留出更大空间:
    <activity android:name=".HelloGoogleMaps" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
  6. 运行应用。

    你现在拥有一个最简单的页面浏览器,其实它还称不上一个真正的浏览器,一旦你点击一个链接,默认的Android浏览器会处理这个Intent并打开新的页面,因为这个Activity技术上还没有处理打开新链接的请求。除了添加一个intent filter来打开网页,你可以重写WebViewClient类来让Activity处理它自己的URL请求。

  7. 在类HelloWebView里面内嵌一个类:
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
  8. 在onCreate(Bundle)方法末尾,设置上面自定义的类HelloWebViewClient的实例作为WebViewClient:
    mWebView.setWebViewClient(new HelloWebViewClient());

    这行代码让在初始WebView对象里面打开任何网页。

    这行代码创建一个WebViewClient,让WebView对象自己加载自身被点击的URL。

    重新运行应用,新页面也在当前Activity被加载。但是你不能返回先前打开的页面。为了实现这个功能,需要处理设备上的BACK按钮来回到前面的页面,而不是退出应用。

  9. 为了处理BACK按钮点击事件,在类HelloWebView里面添加下面的方法:
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    在当前Activity里面,无论何时按下一个按钮,都会调用 onKeyDown(int, KeyEvent) 回调函数。条件语句使用KeyEvent来检查按下的是否是BACK按钮,并检查WebView是否真的能够返回上一个页面(是否有浏览历史)。如果两个条件都满足,就调用goBack()方法来返回WebView历史的上一步。返回true表示这个事件已经被处理过了。如果条件不满足,事件会被发送回系统。

  10. 重新运行应用。现在就能够在当前Activity打开新的连接,并能导航返回前面浏览的页面。

当打开应用,应该能看到如下画面:

posted on 2011-12-08 12:33  OnionD  阅读(225)  评论(0编辑  收藏  举报

导航