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之间的交互,让客户端应用在用户交互和界面方面更加优秀。