WebView允許你創建自己的窗口來顯示網頁(乃至開發一個完整的浏覽器)。
在這個教程中,你可以創建一個簡單的Acitivity來顯示和導航網頁。
1、創建一個新的項目命名為HelloWebView。
2、打開 res/layout/main.xml文件並加入下面的內容:
[html]
- <?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文件(linc注:如果你現在用最新的ADT,那麼這個文件是
HelloWebViewActivity.java)。在類的頂部,聲明一個WebView對象:
[java]
- WebView mWebView;
然後把用下面的代碼完成onCreate()方法:
[java]
- 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;用getSettings()請求一個WebSettings對象;並用setJavaScriptEnabled(boolean)將WebView的JavaScript置成可用。最後,用loadUrl(String)加載一個初始化好的網頁。
由於本程序需要接入網絡,你要在Android manifest文件中加一個適當的權限。打開AndroidManifest.xml文件並加上如下子元素:
[html]
- <uses-permission android:name="android.permission.INTERNET" />
在manifast文件中,移走標題欄以給網頁更多的空間,使用"NoTitleBar"主題:
[html]
- <activity android:name=".HelloGoogleMaps" android:label="@string/app_name"
- android:theme="@android:style/Theme.NoTitleBar">
現在運行這個程序吧!
你現在已經有了最簡單的網頁顯示工具了。它現在還不是一個浏覽器呢,因為如果你點擊一個鏈接,默認的Android浏覽器處理了這個Intent來顯示一個網頁,原來這個Activity在技術上是不能夠做這些的。不用intent過濾器來顯示網頁,你可以重寫一個WebViewClient類來啟用Activity處理自己的URL請求。
在HelloAndroid Activity中,加入內部類:
[java]
- private class HelloWebViewClient extends WebViewClient {
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
- }
然後在onCreate(Bundle)方法的最後,為WebViewClient設置一個HelloWebViewClient的實例:
[java]
- mWebView.setWebViewClient(new HelloWebViewClient());
這一行可以放在任何WebView對象初始化之後。
創建了WebViewClient就可以選擇WebView上任意URL並在同一個WebView中加載。shouldOverrideUrlLoading(WebView, String)方法傳入當前的WebView和請求的URL,它所做的事情就是在給定的view中加載URL。返回true說明這個方法已經處理了URL,這個事件就不用再傳遞了(這時,會創建一個Intent並由浏覽器程序處理)。
如果你再次運行這個程序,這個Activity會加載一個新的頁。然而你還是不能導航到前一個頁面。要如此做,你只需處理設備的BACK鍵,以使它返回到前一個頁,而不是退出程序。
[java]
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
- mWebView.goBack();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
這個onKeyDown(int, KeyEvent)回調方法將會在Activity中按鈕被按下的時候調用。KeyEvent中的條件是核對按下的鍵是BACK鍵以及WebView可以回退(它有歷史記錄)。如果條件滿足,就會調用goBack()方法在WebView歷史中回退一個步驟。返回true表明這個事件已經被處理了。如果條件不滿足,這個事件就會被回送給系統。再次運行程序。你現在可以點擊進入鏈接並能夠在頁面歷史中回退了。
當你打開程序,你將會看到如下的界面: