原文地址:http://www.pocketdigi.com/20110216/176.html
javascript
WebView是個好東西,做用至關於一個迷你的瀏覽器,採用Webkit內核,所以完美支持html,javascript,css等。有時候,咱們徹底能夠把UI甚至數據處理都交給WebView,配合PHP等服務端程序,這樣Android開發就變成了網頁開發,能夠省不少精力。
下面是一個WebView的簡單例子,若是用把全部功能都交給服務端腳本處理,這個程序已經很完整了,你只要寫好網頁,把URL填上,再編譯,就是一個新軟件。
程序功能介紹:打開網頁同時顯示一個ProgressDialog,網頁載入完畢則隱藏,點擊頁面上連接時再次顯示ProgressDialog,載入完隱藏,可用返回鍵返回上一頁。
XML佈局: css
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0" encoding="UTF-8"?> <AbsoluteLayout android:orientation="vertical" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <WebView android:id="@+id/wv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_x="0.0dip" android:layout_y="0.0dip" android:layout_weight="1.0" /> </AbsoluteLayout> |
JAVA代碼: html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
package com.pocketdigi.webview; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; public class main extends Activity { /** Called when the activity is first created. */ WebView wv; ProgressDialog pd; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init();//執行初始化函數 loadurl(wv,"http://www.pocketdigi.com"); handler=new Handler(){ public void handleMessage(Message msg) {//定義一個Handler,用於處理下載線程與UI間通信 if (!Thread.currentThread().isInterrupted()) { switch (msg.what) { case 0: pd.show();//顯示進度對話框 break; case 1: pd.hide();//隱藏進度對話框,不可以使用dismiss()、cancel(),不然再次調用show()時,顯示的對話框小圓圈不會動。 break; } } super.handleMessage(msg); } }; } public void init(){//初始化 wv=(WebView)findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//可用JS wv.setScrollBarStyle(0);//滾動條風格,爲0就是不給滾動條留空間,滾動條覆蓋在網頁上 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(final WebView view, final String url) { loadurl(view,url);//載入網頁 return true; }//重寫點擊動做,用webview載入 }); wv.setWebChromeClient(new WebChromeClient(){ public void onProgressChanged(WebView view,int progress){//載入進度改變而觸發 if(progress==100){ handler.sendEmptyMessage(1);//若是所有載入,隱藏進度對話框 } super.onProgressChanged(view, progress); } }); pd=new ProgressDialog(main.this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("數據載入中,請稍候!"); } public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回鍵 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { wv.goBack(); return true; }else if(keyCode == KeyEvent.KEYCODE_BACK){ ConfirmExit();//按了返回鍵,但已經不能返回,則執行退出確認 return true; } return super.onKeyDown(keyCode, event); } public void ConfirmExit(){//退出確認 AlertDialog.Builder ad=new AlertDialog.Builder(main.this); ad.setTitle("退出"); ad.setMessage("是否退出軟件?"); ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按鈕 @Override public void onClick(DialogInterface dialog, int i) { // TODO Auto-generated method stub main.this.finish();//關閉activity } }); ad.setNegativeButton("否",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { //不退出不用執行任何操做 } }); ad.show();//顯示對話框 } public void loadurl(final WebView view,final String url){ new Thread(){ public void run(){ handler.sendEmptyMessage(0); view.loadUrl(url);//載入網頁 } }.start(); } } |