记得有一段时间安卓的webview挺火的,很多都喜欢用h5来开发页面。不过相对于原声安卓,webview的缺点显而易见,慢,耗电,用户体验不好。或许对开发人员还好,因为可以跨平台(ios,安卓都能用),而且开发难度也不是很大。安卓本身的webview是基于webkit浏览器的,而如果用过支付宝或者微信其实就能发现,他们肯定是进行了很多改进,把网页一下拉就能看到xxx提供技术支持。
下面这段代码介绍了webview的简单用法,以及如何通过安卓通过post方法去访问一个webview。
import org.apache.http.util.EncodingUtils;
import android.support.v7.app.ActionBarActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends ActionBarActivity {
private WebView wb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wb = (WebView) findViewById(R.id.webview);
//因为webview是用来加载网页的,所以android为他提供了一些浏览器操作
//goBack()后退
//goForward()前进
//zoomIn()放大网页
//zoomOut()缩小网页
//wb.loadUrl("");这个方法还算常用,可以用来加载网上的url,也可以加载本地的html页面
//wb.loadDataWithBaseUrl(baseurl,data,mimeType,encoding)使用webview来加载html代码,第一个参数是指定要加载的html代码,其余的猜都能猜到
wb.setVerticalScrollbarOverlay(true); //指定的垂直滚动条有叠加样式
WebSettings settings = wb.getSettings();
settings.setJavaScriptEnabled(true);//让其支持javascript
settings.setUseWideViewPort(true);//设定支持viewport
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);//设定支持缩放
String postData = "key1=value1&key2=value2";
wb.postUrl("http://116.228.21.162:9127/umsFrontWebQmjf/umspay", EncodingUtils.getBytes(postData, "utf-8"));//通过post方法访问URL,EncodingUtils为org.apache.http.util包下的类
wb.setWebViewClient(new WebViewClient() {//对url状态进行监听
@Override
public void onPageFinished(WebView view, String url) {
if (url.equals("http://116.228.21.162:9127/umsFrontWebQmjf/payInfo!backSuccessPage.ac")) {
// getEvenice();
}
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.i("info", "start......" + url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("info", "should over" + url);
return super.shouldOverrideUrlLoading(view, url);
}
});
}
}
这里我简单介绍一下js对安卓和webview进行交互。
html代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
<script type="text/javascript">
function appendText(a){
var div = document.getElementById('content');
div.innerHTML = div.innerHTML + a + '<br/>';
}
</script>
</head>
<body>
这是一个本地的HTML页面<br/>
<a href="tel:9527">
<img src="images/getready.png">
</a>
<br/>
<a href="javascript:plugin.call('9527');">直接调用java方法</a>
<br/>
<div id="content">
</div>
</body>
</html>
Java代码
public class MainActivity extends Activity {
private WebView webView;
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webview);
//webView.loadUrl("http://www.baidu.com");
webView.loadUrl("file:///android_asset/index.html");
//开启使用Javascript函数
webView.getSettings().setJavaScriptEnabled(true);
//将一个java对象传递到HTML页面中
//plugin就是页面中js对象的名称
webView.addJavascriptInterface(new MyPlugin(), "plugin");
}
class MyPlugin{
public void call(String number){
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
startActivity(intent);
}
}
public void append(View btn){
//调用js函数
webView.loadUrl("javascript:appendText('找不到工作了怎么办?');");
}
}
Xml代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"/>
<Button
android:layout_width="fill_parent"
android:layout_weight="0"
android:layout_height="wrap_content"
android:text="调用Js函数"
android:onClick="append"/>
</LinearLayout>