android開發中WebView的使用(附完整程序)
WebView是個好東西,作用相當於一個迷你的瀏覽器,采用Webkit內核,因此完美支持html,javascript,css等。有時候,我們完 全可以把UI甚至數據處理都交給WebView,配合PHP等服務端程序,這樣Android開發就變成了網頁開發,可以省很多精力。下麵是一個WebView的簡單例子,如果用把所有功能都交給服務端腳本處理,這個程序已經很完整了,你隻要寫好網頁,把URL填上,再編譯,就是一個新軟件。
程序功能介紹:打開網頁同時顯示一個ProgressDialog,網頁載入完畢則隱藏,點擊頁麵上鏈接時再次顯示ProgressDialog,載入完隱藏,可用返回鍵返回上一頁。
XML布局:
<?xml version="1.0" encoding="UTF-8"?>
<AbsoluteLayout android:orientation="vertical" android: android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:andro>
<WebView android:
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代碼:
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,"https://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();
}
}
最後更新:2017-04-02 16:47:50