Android中的WebView詳細(xì)介紹
Android中WebView的詳細(xì)解釋?zhuān)?/p>
1. 概念:
WebView(網(wǎng)絡(luò)視圖)能加載顯示網(wǎng)頁(yè),可以將其視為一個(gè)瀏覽器。它使用了WebKit渲染引擎加載顯示網(wǎng)頁(yè)。
2. 使用方法:
(1).實(shí)例化WebView組件:
A.在Activity中實(shí)例化WebView組件。eg:
WebView webView = new WebView(this);
B.調(diào)用WebView的loadUrl()方法,設(shè)置WevView要顯示的網(wǎng)頁(yè).eg:
互聯(lián)網(wǎng)用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html");
本地文件存放在:assets 文件中
C.調(diào)用Activity的setContentView( )方法來(lái)顯示網(wǎng)頁(yè)視圖。
D.需要在AndroidManifest.xml文件中添加權(quán)限,否則會(huì)出現(xiàn)Web page not available錯(cuò)誤。
<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中實(shí)例化WebView。
C.調(diào)用WebView的loadUrl()方法,設(shè)置WebView要顯示的網(wǎng)頁(yè).
D.調(diào)用setWebViewClient()方法設(shè)置WebView視圖。響應(yīng)鏈接功能。
E.需要在AndroidManifest.xml文件中添加權(quán)限,否則出現(xiàn)Web page not available錯(cuò)誤。
<uses-permission android:name="android.permission.INTERNET"/>
3. 兩種方法的區(qū)別:
(1).第一種方法:點(diǎn)擊鏈接是新開(kāi)Android的系統(tǒng)browser中響應(yīng)該鏈接。
(2).第二種方法:點(diǎn)擊鏈接由自己處理,而不是新開(kāi)Android的系統(tǒng)browser中響應(yīng)該鏈接。給WebView添加一個(gè)事件監(jiān)聽(tīng)對(duì)象(WebViewClient)并重寫(xiě)其中的shouldOverrideUrlLoading方法:對(duì)網(wǎng)頁(yè)中超鏈接按鈕的響應(yīng)。當(dāng)按下某個(gè)連接時(shí)WebViewClient會(huì)調(diào)用這個(gè)方法,并傳遞參數(shù):按下的url。
4. 總結(jié):
(1). 用WebView點(diǎn)鏈接看了很多頁(yè)以后為了讓W(xué)ebView支持回退功能,需要覆蓋覆蓋Activity類(lèi)的onKeyDown()方法,如果不做任何處理,點(diǎn)擊系統(tǒng)回退剪鍵,整個(gè)瀏覽器會(huì)調(diào)用finish()而結(jié)束自身,而不是回退到上一頁(yè)面。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
// goBack()表示返回WebView的上一頁(yè)面
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
(2). 設(shè)置WebView基本信息:
A.如果訪問(wèn)的頁(yè)面中有Javascript,則webview必須設(shè)置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
B.觸摸焦點(diǎn)起作用:
requestFocus();
C.取消滾動(dòng)條:
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設(shè)置支持JavaScript
mSettings.setJavaScriptEnabled(true);
// 加載URL
mWebView.loadUrl(FLG_URL);
myWebView = new MyWebView(this, mWebView);
mWebView.setWebViewClient(myWebView);
}
/**
* 加載的是系統(tǒng)自帶的瀏覽器
*/
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的上一頁(yè)面
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();
/**
* 構(gòu)造方法
*
* @param mContext
* @param mWebView
*/
public MyWebView(Context mContext, WebView mWebView) {
super();
this.mContext = mContext;
this.mWebView = mWebView;
}
/**
* 打開(kāi)鏈接前的事件,為了避免再次按的時(shí)候加載的是系統(tǒng)自帶的瀏覽器,點(diǎn)擊鏈接由自己處理
*/
// 這個(gè)函數(shù)我們可以做很多操作,比如我們讀取到某些特殊的URL,于是就可以不打開(kāi)地址,取消這個(gè)操作,進(jìn)行預(yù)先定義的其他操作,這對(duì)一個(gè)程序是非常必要的。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null) {
mWebView.loadUrl(url);
Log.d(TAG, "--->shouldOverrideUrlLoading--->");
}
return true;
}
/**
* 接收到Http請(qǐng)求的事件
*/
@Override
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
super.onReceivedHttpAuthRequest(view, handler, host, realm);
}
/**
* 載入頁(yè)面開(kāi)始的事件
*/
// 這個(gè)事件就是開(kāi)始載入頁(yè)面調(diào)用的,通常我們可以在這設(shè)定一個(gè)loading的頁(yè)面,告訴用戶(hù)程序在等待網(wǎng)絡(luò)響應(yīng)。
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d(TAG, "--->onPageStarted--->");
}
/**
* 載入頁(yè)面完成的事件
*/
// 同樣道理,我們知道一個(gè)頁(yè)面載入完成,于是我們可以關(guān)閉loading條,切換程序動(dòng)作。
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d(TAG, "--->onPageFinished--->");
}
/**
* 當(dāng)瀏覽器訪問(wèn)制定的網(wǎng)址發(fā)生錯(cuò)誤時(shí)會(huì)通知我們應(yīng)用程序,比如網(wǎng)絡(luò)錯(cuò)誤。
*/
@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).權(quán)限:
<uses-permission android:name="android.permission.INTERNET" />
相關(guān)文章
使用Chrome瀏覽器調(diào)試Android App詳解
這篇文章主要介紹了使用Chrome瀏覽器調(diào)試Android App詳解,本網(wǎng)講解了使用Facebook開(kāi)源Stetho實(shí)現(xiàn)在Chrome中調(diào)試Android App中,需要的朋友可以參考下2015-05-05
android studio實(shí)現(xiàn)簡(jiǎn)單考試應(yīng)用程序?qū)嵗a詳解
這篇文章主要介紹了android studio實(shí)現(xiàn)簡(jiǎn)單考試應(yīng)用程序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android 定時(shí)器實(shí)現(xiàn)圖片的變換
這篇文章主要介紹了Android 定時(shí)器實(shí)現(xiàn)圖片的變換的相關(guān)資料,利用到定時(shí)器和handler,message的結(jié)合實(shí)現(xiàn)改功能,需要的朋友可以參考下2017-08-08
Android Activity切換動(dòng)畫(huà)詳解及實(shí)例
這篇文章主要介紹了Android Activity切換動(dòng)畫(huà)overridePendingTransition詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03
Android自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡
這篇文章主要為大家詳細(xì)介紹了Android自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Android取消EditText自動(dòng)獲取焦點(diǎn)默認(rèn)行為
在項(xiàng)目中,一進(jìn)入一個(gè)頁(yè)面, EditText默認(rèn)就會(huì)自動(dòng)獲取焦點(diǎn),很是郁悶,Android 如何讓EditText不自動(dòng)獲取焦點(diǎn)?于是搜集整理一番,曬出來(lái)和大家分享,希望對(duì)你們有所幫助2012-12-12
Android實(shí)現(xiàn)掃一掃功能之繪制指定區(qū)域透明區(qū)域
這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)掃一掃功能之繪制指定區(qū)域透明區(qū)域的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-07-07

