WebView是Android系統提供的一個基于WebKit的web框架,可以讓開發者將網頁嵌入自己的應用中,實現在應用中顯示網頁的功能。使用WebView可以在應用內展示網頁,讓用戶直接在應用內訪問某些特定網站,同時也可用于實現Hybrid應用,使得應用可以像網頁一樣動態加載內容并改變界面。下面是對使用WebView構建APP的原理和詳細介紹。
一、原理
WebView是一個簡單的組件,它可以方便地展示Web頁面,并支持JavaScript與Android 互通交互。它的實現原理大致如下:
1.在應用的布局文件中添加一個WebView控件。
2.使用WebView控件加載Web頁面。
3.當WebView控件加載Web頁面時,會啟動另一個進程,在該進程中靜態生成WebViewCore對象,WebViewCore對象負責構建WebView渲染的視圖樹。
4.當Web頁面上的內容需要被繪制時,WebView控件會通過IPC與WebViewCore進程通信,讓WebViewCore計算出渲染樹的所有元素位置,將渲染的結果回傳給WebView控件。
5.WebView控件將渲染樹繪制到屏幕上完成頁面的展示。
通過上述原理可以了解到,WebView使用了多進程的架構來實現與瀏覽器的集成,同時,由于WebView獨立的渲染進程,它具有足夠的安全性,即使Web內容受到攻擊,也不會波及到主進程,提高了應用的安全性。
二、詳細介紹
1. 創建WebView控件
創建WebView控件的方式有兩種:
①在XML文件中定義WebView:
```
android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` ②在Java代碼中創建WebView: ``` WebView webView = new WebView(context); Layout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); webView.setLayoutParams(params); ``` 2. 加載Web頁面 WebView的常用方法有loadUrl(String url)和loadData(String data, String mimeType, String encoding)。 ①loadUrl方法加載Web頁面: ``` webView.loadUrl("https://www.baidu.com"); ``` ②loadData方法加載Web頁面: ``` String htmlData = "Hello,World!
";
webView.loadData(htmlData,"text/html","utf-8");
```
3. WebView的設置
設置WebView的方法有很多,這里只介紹幾個比較常用的方法:
①啟用JavaScript:
```
webView.getSettings().setJavaScriptEnabled(true);
```
②加載進度的監聽:
```
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
//newProgress為加載進度,從0~100
}
});
```
③ WebViewClient的設置:
```
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//重定向的url
webView.loadUrl(url);
return true;
}
});
```
上述代碼中,shouldOverrideUrlLoading方法用于攔截WebView中的url地址,進行處理后再進行頁面的加載。
4. Web頁面與Android互通
當Web頁面需要與Android交互時,可以使用JavaScript與WebView進行通信。通過WebView的addJavaScriptInterface(Object object, String name)方法,可以將Android中的一個Java對象向瀏覽器中的JavaScript對象傳遞,并通過調用該對象中的方法實現與瀏覽器的交互。
```
webView.addJavascriptInterface(new AndroidInterface(), "android");
class AndroidInterface{
@JavascriptInterface
void callAndroid(){
//Android代碼具體實現
}
}
```
在上述代碼中,AndroidInterface是Android中的Java對象,在瀏覽器JavaScript對象中被調用時,會在必要時調用JavaScript接受的回調方法。
總之,使用WebView可以方便地在應用中展示Web頁面,同時也可以實現Web頁面與Android之間的交互,讓客戶端應用在用戶交互和界面方面更加優秀。