WebView是Android中一個非常重要的組件,他可以在應用內部顯示網頁和嵌入第三方應用。WebView內部採用WebKit內核,可以解析渲染HTML、CSS和JS等Web前端技術,由於內置了WebKit,開發者可以方便地在應用中內嵌網頁以及通過JavaScript與原生代碼進行交互。
一、WebView的創建與初始化
首先,我們需要將WebView組件添加到我們的布局文件或動態添加到我們的Activity中,通過設置XML或者代碼配置WebView的屬性,比如布局位置、大小等。
一般來說,使用布局文件的方式可以減少Activity代碼量,提高可讀性。示例代碼如下:
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" /
接著,我們需要在Activity中找到該組件並進行初始化。除了常見的findViewById之外,使用載入HTML、Web頁面和本地文件的setVisibility方法設置WebView的可見性。示例代碼如下:
WebView webView = (WebView) findViewById(R.id.webview);
webView.setVisibility(View.VISIBLE);
二、用WebChromeClient實現進度條
使用WebChromeClient類可以實現WebView的進度條效果,該類為WebView安卓提供了官方的Web視圖界面組件,其中包含一個內置的進度條,可以在WebView載入頁面時,顯示載入進度。示例代碼如下:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
setProgress(newProgress * 100); //修改Activity的進度
}
});
在上面的代碼中,我們重寫了onProgressChanged方法,在裡面改變了Activity的進度值,就可以實現一個簡單的進度條效果了。
三、使用WebSettings配置WebView的屬性
WebSettings類是WebView的一個屬性管理器,可以用來配置WebView的各種屬性。比如,我們可以通過WebSettings設置是否支持JavaScript、啟用緩存、啟用DOM存儲等。示例代碼如下:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); //啟用JavaScript支持
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); //啟用緩存
webSettings.setDomStorageEnabled(true); //啟用DOM存儲
webSettings有非常多的方法,可以滿足我們對WebView的各種需求,需要根據實際情況來設置。
四、使用WebViewClient載入頁面
WebViewClient類可以管理WebView的各種狀態,我們可以繼承這個類,以方便地載入頁面,處理錯誤,等等。示例代碼如下:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); //在當前WebView上打開鏈接
return true;
}
});
我們在shouldOverrideUrlLoading方法中,返回true並以當前的WebView打開鏈接。但是,此時我們還不能在WebView中載入網頁,需要在Activity中的onCreate方法中手動調用loadUrl方法,傳入需要載入的鏈接。示例代碼如下:
WebView webView = (WebView) findViewById(R.id.webview);
webView.setVisibility(View.VISIBLE);
webView.loadUrl("http://www.example.com");
五、使用JavaScript交互
如前面所提到的,WebView內置了JavaScript引擎,我們可以利用這個引擎和JavaScript代碼來實現WebView和原生代碼之間的交互。比如,我們可以通過JavaScript代碼獲取當前頁面的標題,或者從原生代碼向WebView中注入JavaScript代碼。示例代碼如下:
webView.loadUrl("javascript:alert(document.title)"); //從原生代碼向WebView中注入JavaScript代碼
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:alert(document.title)"); //從WebView中獲取當前頁面的標題
}
});
可以看到,通過將需要執行的JavaScript代碼前綴為”javascript:”,然後通過WebView.loadUrl方法或者WebViewClient.onPageFinished回調函數,將JavaScript代碼注入到WebView中,即可實現JavaScript和原生代碼之間的交互。
六、WebApi調用
通過WebView的loadUrl方法,我們可以訪問互聯網,調用WebApi來實現豐富多彩的功能。具體方式是,將需要訪問的WebApi鏈接作為參數,傳入loadUrl方法即可。示例代碼如下:
webView.loadUrl("http://api.example.com/api/v1/user_info?user_id=123456"); //通過WebView的loadUrl方法調用WebApi
需要注意的是,應該讓WebView在子線程中載入鏈接。如果鏈接需要輸入數據,則可以通過POST方式傳遞數據。示例代碼如下:
String postData = "user_name=admin&user_pwd=123456";
webView.postUrl("http://api.example.com/api/v1/login", postData.getBytes()); //通過POST方式調用WebApi
七、總結
本文簡單介紹了Android中WebView的原理和用法,包括創建和初始化、實現進度條、配置屬性、載入頁面、JavaScript交互和WebApi調用。由於WebView是一個十分重要的組件,開發者應該學習並掌握其用法,尤其是在需要將網頁嵌入應用中,或實現WebApi功能時,是不可或缺的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259495.html