天天看點

android使用者界面-元件Widget-網絡視圖WebView

一個WebView的簡單例子 。

在開發過程中應該注意幾點: 

1.AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會出Web page not available錯誤。

2.如果通路的頁面中有Javascript,則webview必須設定支援Javascript。

webview.getSettings().setJavaScriptEnabled(true); 

3.如果頁面中連結,如果希望點選連結繼續在目前browser中響應,而不是新開Android的系統browser中響應該連結,必須覆寫 webview的WebViewClient對象。

mWebView.setWebViewClient(new WebViewClient(){ 

public boolean shouldOverrideUrlLoading(WebView view, String url) { 

view.loadUrl(url); 

return true; 

}); 

});

4.如果不做任何處理,浏覽網頁,點選系統“Back”鍵,整個Browser會調用finish()而結束自身,如果希望浏覽的網 頁回退而不是推出浏覽器,需要在目前Activity中處理并消費掉該Back事件。

public boolean onKeyDown(int keyCode, KeyEvent event) { 

if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 

mWebView.goBack(); 

return super.onKeyDown(keyCode, event); 

下一步讓我們來了解一下android中webview是如何支援javascripte自定義對象的,在w3c标準中js有 window,history,document等标準對象,同樣我們可以在開發浏覽器時自己定義我們的對象調用手機系統功能來處理,這樣使用js就可以 為所欲為了。

看一個執行個體:

view plaincopy to clipboardprint?

public class WebViewDemo extends Activity { 

private WebView mWebView; 

private Handler mHandler = new Handler(); 

public void onCreate(Bundle icicle) { 

super.onCreate(icicle); 

setContentView(R.layout.webviewdemo); 

mWebView = (WebView) findViewById(R.id.webview); 

WebSettings webSettings = mWebView.getSettings(); 

webSettings.setJavaScriptEnabled(true); 

mWebView.addJavascriptInterface(new Object() { 

public void clickOnAndroid() { 

mHandler.post(new Runnable() { 

public void run() { 

mWebView.loadUrl("javascript:wave()"); 

}, "demo"); 

}

我們看addJavascriptInterface(Object obj,String interfaceName)這個方法,該方法将一個java對象綁定到一個javascript對象中,javascript對象名就是 interfaceName(demo),作用域是Global。這樣初始化webview後,在webview加載的頁面中就可以直接通過 javascript:window.demo通路到綁定的java對象了。來看看在html中是怎樣調用的。

<html> 

<mce:script language="javascript"><!-- 

function wave() { 

document.getElementById("droid").src="android_waving.png"; 

// --></mce:script> 

<body> 

<a onClick="window.demo.clickOnAndroid()"> 

<img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br> 

Click me! 

</a> 

</body> 

</html> 

</html>

這樣在javascript中就可以調用java對象的clickOnAndroid()方法了,同樣我們可以在此對象中定義很多方法(比 如發短信,調用聯系人清單等手機系統功能。),這裡wave()方法是java中調用javascript的例子。

這裡還有幾個知識點:

2)addJavascriptInterface方法中要綁定的Java對象及方法要運作另外的線程中,不能運作在構造他的線程中,這也是使用 Handler的目的。

總結:

1、添權重限:AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會出Web page not available錯誤。

2、在要Activity中生成一個WebView元件:WebView webView = new WebView(this);

3、設定WebView基本資訊:

如果通路的頁面中有Javascript,則webview必須設定支援Javascript。

觸摸焦點起作用

requestFocus();

取消滾動條

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

4、設定WevView要顯示的網頁:

網際網路用:webView.loadUrl("http://www.google.com"); 

本地檔案用:webView.loadUrl("file:///android_asset/XX.html"); 本地檔案存放在:assets檔案中

5、如果希望點選連結由自己處理,而不是新開Android的系統browser中響應該連結。

給WebView添加一個事件監聽對象(WebViewClient) 

并重寫其中的一些方法

shouldOverrideUrlLoading:對網頁中超連結按鈕的響應。

當按下某個連接配接時WebViewClient會調用這個方法,并傳遞參數:按下的url 

onLoadResource 

onPageStart 

onPageFinish 

onReceiveError

onReceivedHttpAuthRequest

6、如果用webview點連結看了很多頁以後,如果不做任何處理,點選系統“Back”鍵,整個浏覽器會調用finish()而結束自身,如果希望浏覽的網頁回退而不是退出浏覽器,需要在目前Activity中處理并消費掉該Back事件。

覆寫Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。

public boolean onKeyDown(int keyCoder,KeyEvent event){

if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){

webview.goBack(); //goBack()表示傳回webView的上一頁面

return true;

return false;

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1080680