WebView的使用很方便。在學習WebView之前,我們現看看如何通過程式中調瀏覽器。
1、在程式中調起瀏覽器
Uri uri = Uri.parse("http://commonsware.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
2、通過WebView嵌入瀏覽器
1)允許internet串連的訪問
在上面的例子中,我們可能發現無法相關的網頁,這是因為程式不具備internet串連的許可權,我們需要在Androidmanifest.xml中為App設定相關的許可權。
<manifest... >
... ...
<uses-permission android:name="android.permission.INTERNET" />
<application .....>
... ...
</application>
</manifest>
2)在Android XML中設定WebView控制項
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout .... >
<WebView android:id="@+id/c131_webkit"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
3)通過WebView對象,載入某個URL
WebView browser=(WebView)findViewById(R.id.c131_webkit);
browser.loadUrl("http://commonsware.com");
我們注意到嵌入的browser沒有工具列的,因此需要通過程式來某些操作和處理,例如reload(), goBack(), canGoBack(), goForward(), canGoForward(), goBackOrForward(),負數表示回跳N次,正數表示前行N次,canGoBackOrForward(), clearCache(), clearHistory()。
4)通過WebView對象,載入自己的內容
我們可以將WebView作為自己的布局框,在裡面使用HTML來表述自己的內容。
browser.loadData("<html><body><h2>Hello , world!</h2></body></html>", "text/html", "UTF-8");
3、獲得觸發的事件響應
我們可以通過WebViewClient在WebView中加鉤子來擷取觸發事件和相應。下面是一個簡單的例子,瀏覽器中顯示目前的時間,並作為一個連結,當我們點擊這個連結時,更新為當前最新時間。
private WebView browser= null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chapter_13_test1);
browser = (WebView)findViewById(R.id.c131_webkit);
browser.setWebViewClient(new WebViewClient(){
/* 這個事件,將在使用者點選連結時觸發。通過判斷url,可確定如何操作,如果返回true,表示我們已經處理了這個request,如果返回false,表示沒有處理,那麼瀏覽器將會根據url擷取網頁*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
loadTime();
return true; //表示已經處理了這次URL的請求
}
});
loadTime();
}
private void loadTime(){
String page="<html><body><a href=/"clock/">" + new Date().toString() + "</a></body></html>";
/* 這裡我們使用了loadDataWithBaseUrl的方式。瀏覽器可以通過"file:///android_asset/"來獲得映用中asset/的資源。但是如果我們沒有設定baseUrl,或者為空白,這無法擷取,想擷取這些資源,baseUrl不能設定為http(s)/ftp(s)/about/javascript這些已有專屬的定義。在例子中,我們baseUrl設定為"wei://base".
對於上面的那個連結地址為wei://base/clock */
browser.loadDataWithBaseURL("wei://base", page, "text/html","UTF-8", null);
}
4、豐富瀏覽器的設定
我們可以通過webview.getSettings()獲得WebSettings對象,對瀏覽器進行設定。如果我們需要支援JavaScript,我們需要如下設定:
browser.getSettings().setJavaScriptEnabled(true);
有幾個比較常用的,setDefaultFontSize(), setTextSize(), etJavaScriptEnabled(), setJavaScriptCanOpenWindowsAutomatically(), setUserAgent()-“1”表示使用PC瀏覽器,0表示使用手機瀏覽器,可以通知website給出相應的排版方式。
下面是一個例子,在這個例子中,我使用acivity的進度條來顯示載入網頁的進度條,當進度條滿的時候,進度條會消失。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Activity activity = this;
//因為方法是以final的方式,所以設定final。
//設定activity的進度條,下面一句必須在setContentView之前,否則會報錯。下面的語句也可以用activity.requestWindowFeature(Window.FEATURE_PROGRESS);來替代
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.chapter_13_test1);
browser=(WebView)findViewById(R.id.c131_webkit);
browser.getSettings().setJavaScriptEnabled(true);
//設定支援javascript的例子
//通過WebChromeClient可以處理JS對話方塊,titles, 進度,等,這個例子,我們處理,我們將websit下載的進度同步到acitity的進度條上。
browser.setWebChromeClient(new WebChromeClient(){
public void onProgressChanged(WebView view, int newProgress) {
//activity的進度是0 to 10000 (both inclusive),所以要*100
activity.setProgress(newProgress * 100);
}
});
browser.loadUrl("http://slashdot.org/");
}
相關連結:我的Andriod開發相關文章