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功能时,是不可或缺的。