Android中的WebView詳細介紹_Android

來源:互聯網
上載者:User

Android中WebView的詳細解釋:

1. 概念:

WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁。

2. 使用方法:

(1).執行個體化WebView組件:
A.在Activity中執行個體化WebView組件。eg:

複製代碼 代碼如下:

   WebView webView = new WebView(this);

B.調用WebView的loadUrl()方法,設定WevView要顯示的網頁.eg:
複製代碼 代碼如下:

互連網用:webView.loadUrl("http://www.google.com");
本地檔案用:webView.loadUrl("file:///android_asset/XX.html");
本地檔案存放在:assets 檔案中

C.調用Activity的setContentView( )方法來顯示網頁視圖。
D.需要在AndroidManifest.xml檔案中添加許可權,否則會出現Web page not available錯誤。

複製代碼 代碼如下:

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

 (2).自訂WebView組件繼承WebViewClient:
A.在布局檔案中聲明WebView。eg:

複製代碼 代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>


B.在Activity中執行個體化WebView。
C.調用WebView的loadUrl()方法,設定WebView要顯示的網頁.
D.調用setWebViewClient()方法設定WebView視圖。響應連結功能。
E.需要在AndroidManifest.xml檔案中添加許可權,否則出現Web page not available錯誤。
複製代碼 代碼如下:

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

 3. 兩種方法的區別:
(1).第一種方法:點選連結是新開Android的系統browser中響應該連結。
(2).第二種方法:點選連結由自己處理,而不是新開Android的系統browser中響應該連結。給WebView添加一個事件監聽對象(WebViewClient)並重寫其中的shouldOverrideUrlLoading方法:對網頁中超連結按鈕的響應。當按下某個串連時WebViewClient會調用這個方法,並傳遞參數:按下的url。

4. 總結:
(1). 用WebView點連結看了很多頁以後為了讓WebView支援回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面。

複製代碼 代碼如下:

@Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
       // goBack()表示返回WebView的上一頁面
           mWebView.goBack();
           return true;
       }
       return super.onKeyDown(keyCode, event);
   }

(2). 設定WebView基本資料:

A.如果訪問的頁面中有Javascript,則webview必須設定支援Javascript。

複製代碼 代碼如下:

webview.getSettings().setJavaScriptEnabled(true); 

B.觸摸焦點起作用:
複製代碼 代碼如下:

 requestFocus();

C.取消捲軸:
複製代碼 代碼如下:

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

5. 整體代碼如下:
(1).MainActivity.java

package com.pansoft.webviewdemo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;

import com.pansoft.webviewdemo.webView.MyWebView;

public class MainActivity extends Activity {
    private WebView mWebView = null;
    private WebSettings mSettings = null;
    /** TAG */
    private String TAG = getClass().getSimpleName();
    /** URL */
    private String FLG_URL = "http://www.baidu.com/";
    private MyWebView myWebView;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // 第二種方法
        init01();
        // 第一種方法
        // init02();

    }

    /**
     * 載入的是webView本身的
     */
    private void init01() {
        setContentView(R.layout.activity_main);
        mWebView =(WebView)findViewById(R.id.webView1);
        mSettings = mWebView.getSettings();
        // WebView設定支援JavaScript
        mSettings.setJavaScriptEnabled(true);
        // 載入URL
        mWebView.loadUrl(FLG_URL);
        myWebView = new MyWebView(this, mWebView);
        mWebView.setWebViewClient(myWebView);

    }

    /**
     * 載入的是系統內建的瀏覽器
     */
    private void init02() {
        mWebView = new WebView(this);
        mSettings = mWebView.getSettings();
        mSettings.setJavaScriptEnabled(true);
        mWebView.loadUrl(FLG_URL);
        setContentView(mWebView);

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        // goBack()表示返回WebView的上一頁面
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

(2).MyWebView.java

package com.pansoft.webviewdemo.webView;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.webkit.HttpAuthHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * MyWebView
 *
 * @author Administrator
 *
 */
public class MyWebView extends WebViewClient {
    private Context mContext;
    private WebView mWebView;
    private String TAG = getClass().getSimpleName();

    /**
     * 構造方法
     *
     * @param mContext
     * @param mWebView
     */
    public MyWebView(Context mContext, WebView mWebView) {
        super();
        this.mContext = mContext;
        this.mWebView = mWebView;
    }

    /**
     * 開啟連結前的事件,為了避免再次按的時候載入的是系統內建的瀏覽器,點選連結由自己處理
     */
    // 這個函數我們可以做很多操作,比如我們讀取到某些特殊的URL,於是就可以不開啟地址,取消這個操作,進行預先定義的其他動作,這對一個程式是非常必要的。
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null) {
            mWebView.loadUrl(url);
            Log.d(TAG, "--->shouldOverrideUrlLoading--->");

        }

        return true;
    }

    /**
     * 接收到Http請求的事件
     */
    @Override
    public void onReceivedHttpAuthRequest(WebView view,

    HttpAuthHandler handler, String host, String realm) {
        super.onReceivedHttpAuthRequest(view, handler, host, realm);
    }

    /**
     * 載入頁面開始的事件
     */
    // 這個事件就是開始載入頁面調用的,通常我們可以在這設定一個loading的頁面,告訴使用者程式在等待網路響應。
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Log.d(TAG, "--->onPageStarted--->");
    }

    /**
     * 載入頁面完成的事件
     */
    // 同樣道理,我們知道一個頁面載入完成,於是我們可以關閉loading條,切換程式動作。
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        Log.d(TAG, "--->onPageFinished--->");
    }

    /**
     * 當瀏覽器訪問制定的網址發生錯誤時會通知我們應用程式,比如網路錯誤。
     */
    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
    }

}

(3).activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

(4).許可權:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.