編輯:關於Android編程
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錯誤。
(2).自定義WebView組件繼承WebViewClient:
A.在布局文件中聲明WebView。eg:
B.在Activity中實例化WebView。
C.調用WebView的loadUrl()方法,設置WebView要顯示的網頁.
D.調用setWebViewClient()方法設置WebView視圖。響應鏈接功能。
E.需要在AndroidManifest.xml文件中添加權限,否則出現Web page not available錯誤。
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
本文實例講述了Android使用GPS獲取用戶地理位置並監聽位置變化的方法。分享給大家供大家參考,具體如下:LocationActivity.java/* Locatio
前言為什麼使用MVP,網上有很多說法,最主要就是減輕了Activity的責任,相比於MVC中的Activity承擔的責任太多,因此有必要講講MVP。MVP入門在MVC框架
ListView是一種非常常見的一個組件,以垂直列表的形式顯示列表項。而完成一個簡單的ListView只需要這麼三個步驟:1、在布局文件XML中添加ListView並配置
本文給大家分享Android裡應用版本更新功能這一塊的實現。一個好的應用軟件都是需要好的維護,從初出版本到最後精品,這個過程需要版本不停的更新,那麼如何讓用戶第一時間獲取