记得有一段时间安卓的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>
时间: 2024-10-25 17:42:41