Android WebView實(shí)例詳解 一、什么是webkit ? Android手機(jī)中內(nèi)置了一款高性能webkit內(nèi)核瀏覽器,在SDK中封裝為一個(gè)叫做WebView組件。 WebKit是Mac OS X v10.3及以上版本所包含的軟件框架(對v 二、Android實(shí)現(xiàn)WebView有以下兩種不同的方法: 3、調(diào)用Activity的setContentView( )方法來顯示網(wǎng)頁視圖 第二種方法的步驟: 三、常用屬性、狀態(tài)描述: WebViewClient常用方法: WebChromeClient常用方法: 四、Android webView開發(fā)過程中相關(guān)知識:
五、Android webView實(shí)例講解 A. webview組件如何使用 AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會(huì)出Web page not available錯(cuò)誤。 2)在要Activity中生成一個(gè)WebView組件:WebView webView = new
WebView(this);或者可以在activity的layout文件里添加webview控件: <WebView android:id="@+id/wv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello" /> 3)設(shè)置WebView基本信息: 4)設(shè)置WevView要顯示的網(wǎng)頁: 5)如果希望點(diǎn)擊鏈接由自己處理,而不是新開Android的系統(tǒng)browser中響應(yīng)該鏈接。給WebView添加一個(gè)事件監(jiān)聽對象(WebViewClient)并重寫其中的一些方法: public boolean shouldOverrideUrlLoading(WebView view,String url){ if(url.indexOf("tel:")<0){//頁面上有數(shù)字會(huì)導(dǎo)致連接電話 view.loadUrl(url); } return true; } 2,打開鏈接前的事件 這個(gè)函數(shù)我們可以做很多操作,比如我們讀取到某些特殊的URL,于是就可以不打開地址,取消這個(gè)操作,進(jìn)行預(yù)先定義的其他操作,這對一個(gè)程序是非常必要的。 同樣道理,我們知道一個(gè)頁面載入完成,于是我們可以關(guān)閉loading條,切換程序動(dòng)作。 這個(gè)事件就是開始載入頁面調(diào)用的,通常我們可以在這設(shè)定一個(gè)loading的頁面,告訴用戶程序在等待網(wǎng)絡(luò)響應(yīng)。 6) 如果用webview點(diǎn)鏈接看了很多頁以后,如果不做任何處理,點(diǎn)擊系統(tǒng)“Back”鍵,整個(gè)瀏覽器會(huì)調(diào)用finish()而結(jié)束自身,如果希望瀏覽的網(wǎng)頁回退而不是退出瀏覽器,需要在當(dāng)前Activity中處理并消費(fèi)掉該Back事件。 public boolean onKeyDown(int keyCoder,KeyEvent event){ if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){ webview.goBack(); //goBack()表示返回webView的上一頁面 return true; } return false; } B. Webview與js交互 Webview與js的雙向交互才是android的webview強(qiáng)大所在,也是馬甲精神能夠徹底執(zhí)行的基礎(chǔ)保障。 首先,webview可以定義一個(gè)在其內(nèi)嵌頁面中可以觸發(fā)的事件 wv.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); rivate final class DemoJavaScriptInterface { nbsp;DemoJavaScriptInterface(){} public void clickonAndroid( final String order){ mHandler.post(newRunnable(){ @Override public void run(){ jsonText="{"name":""+order+""}"; wv.loadUrl("javascript:wave("+jsonText+")"); } }); }
通過以上代碼,即可實(shí)現(xiàn)在其內(nèi)嵌網(wǎng)頁中觸發(fā) window.demo.clickOnAndroid(str)事件并傳參數(shù)str給webview。Webview接收到str之后,可以通過以上代碼觸發(fā)其內(nèi)嵌頁面中的js函數(shù)wave(str)。這樣就可以實(shí)現(xiàn)網(wǎng)頁觸發(fā)webview的事件并傳參數(shù),webview接收參數(shù)并調(diào)用js函數(shù)。 下面看我的Html腳本: <!DOCTYPE html PUBLIC "-//W http://www./TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8"> <title>Insert title
here</title> <script type="text/javascript" src="jquery.js"></script> <script> function toclient() { var order=$("#val").val(); window.demo.clickonAndroid(order); } function wave(str){ //alert(str.name); $("#fromclient").text(str.name); } </script> </head> <body>這是一個(gè)html頁面 <br/> 輸入一個(gè)字符串:<br/> <input id="val" /> <input type="submit" value="點(diǎn)擊提交給客戶端" onclick="toclient();"/> <br /> 顯示返回:<label id="fromclient"></label> </body> </html> 通過腳本看到wave(str)函數(shù)是負(fù)責(zé)將原來傳給webview的數(shù)據(jù)重新拿回頁面,效果圖如下: 另外,如果你想獲取頁面的一些處理數(shù)據(jù)并交給webview客戶端處理,可在wave函數(shù)里將數(shù)據(jù)alert,然后webview中重寫WebChromeClient的onJsAlert函數(shù),具體代碼如下 wv.setWebChromeClient(new MyWebChromeClient()); final class MyWebChromeClient extends WebChromeClient{ @Override
public booleanonJsAlert(WebView view, String url, String message, final JsResult result) { //message就是wave函數(shù)里alert的字符串,這樣你就可以在android客戶端里對這個(gè)數(shù)據(jù)進(jìn)行處理 result.confirm(); } return true; } 六、更多文檔參考: Android WebView實(shí)例詳解 Android安卓Web開發(fā)框架 mobl http:///forum.php?mod=viewthread&tid=345 Android開發(fā)之WebView組件的使用詳解 http://developer.51cto.com/art/201008/216488.htm Android WebView使用 http://www.cnblogs.com/oakpip/archive/2011/04/08/2009800.html Android和js的互調(diào) http://www.cnblogs.com/oakpip/archive/2011/04/10/2011165.html Android開發(fā)學(xué)習(xí)筆記:淺談WebView http://www./kf/201108/101518.html android
WebView總結(jié) http://blog.csdn.net/chenshijun0101/article/details/7045394 |
|