Android 網路開發:淺談 WebView
WebView(網路檢視)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中例項化WebView元件:WebView webView = new WebView(this);
2.呼叫WebView的loadUrl()方法,設定WevView要顯示的網頁:
網際網路用:webView.loadUrl("http://www.google.com");
本地檔案用:webView.loadUrl("file:///android_asset/XX.html"); 本地檔案存放在:assets 檔案中
3.呼叫Activity的setContentView( )方法來顯示網頁檢視
4.用WebView點連結看了很多頁以後為了讓WebView支援回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點選系統回退剪鍵,整個瀏覽器會呼叫finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml檔案中新增許可權,否則會出現Web page not available錯誤。
<uses-permissionandroid:name="android.permission.INTERNET"/>
下面是具體例子:
MainActivity.java
- package com.android.webview.activity;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.webkit.WebView;
- publicclass MainActivity extends Activity {
- private WebView webview;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //例項化WebView物件
- webview = new WebView(this);
- //設定WebView屬性,能夠執行Javascript指令碼
- webview.getSettings().setJavaScriptEnabled(true);
- //載入需要顯示的網頁
- webview.loadUrl("http://www.51cto.com/");
- //設定Web檢視
- setContentView(webview);
- }
- @Override
- //設定回退
- //覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
- publicboolean onKeyDown(int keyCode, KeyEvent event) {
- if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
- webview.goBack(); //goBack()表示返回WebView的上一頁面
- returntrue;
- }
- returnfalse;
- }
在AndroidManifest.xml檔案中的17行新增許可權
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.webview.activity"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="10"/>
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityandroid:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- </manifest>
效果圖:
第二種方法的步驟:
1、在佈局檔案中宣告WebView
2、在Activity中例項化WebView
3、呼叫WebView的loadUrl( )方法,設定WevView要顯示的網頁
4、為了讓WebView能夠響應超連結功能,呼叫setWebViewClient( )方法,設定 WebView檢視
5、用WebView點連結看了很多頁以後為了讓WebView支援回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點選系統回退剪鍵,整個瀏覽器會呼叫finish()而結束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml檔案中新增許可權,否則出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET"/>
下面是具體的例子:
MainActivity.java
- package com.android.webview.activity;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- publicclass MainActivity extends Activity {
- private WebView webview;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- webview = (WebView) findViewById(R.id.webview);
- //設定WebView屬性,能夠執行Javascript指令碼
- webview.getSettings().setJavaScriptEnabled(true);
- //載入需要顯示的網頁
- webview.loadUrl("http://www.51cto.com/");
- //設定Web檢視
- webview.setWebViewClient(new HelloWebViewClient ());
- }
- @Override
- //設定回退
- //覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法
- publicboolean onKeyDown(int keyCode, KeyEvent event) {
- if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
- webview.goBack(); //goBack()表示返回WebView的上一頁面
- returntrue;
- }
- returnfalse;
- }
- //Web檢視
- privateclass HelloWebViewClient extends WebViewClient {
- @Override
- publicboolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- returntrue;
- }
- }
- }
main.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <WebView
- android:id="@+id/webview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- />
- </LinearLayout>
在AndroidManifest.xml檔案中的17行新增許可權
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.webview.activity"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="10"/>
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityandroid:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- </manifest>
效果圖: