这段时间公司同事他们要求讲点android方面的知识(ps:我同事他们都是做PHP的),然后不知道怎么讲才能让他们感兴趣,所以就找了一些WebView的例子跟他们讲了下,下面就是一些关于android调用HTML中js方法和HTML调用android这边的方法的操作。
1,首先大家要知道第一步操作,建立权限,WebView访问是需要访问网络的,所以首先大家不要忘记了在androidmanifest.xml中配置网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
2,android中利用webview调用网页上的JS代码,
android中可以通过webview来实现和JS的交互,在程序中调用js代码,只需要将webivew控件支持的js属性设置为true,然后通过loadUrl就可以直接进行调用,如下:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");//调用页面中test JS方法
3,页面上需要调用java代码的方法,在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
在网页中,只需要像调用JS方法一样,进行调用就可以:
<div id='b'><a οnclick="window.demo.clickOnAndroid()">b.c</a></div>
4,java代码调用JS并传参
首先一样需要带参数的函数形式,但需要注意此处的参数需要final类型,即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,然后进行修改,如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid(final int i) {
mHandler.post(new Runnable() {
public void run() {
int j = i;
j++;
Toast.makeText(Test.this, "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
然后在HTML页面中,利用如下代码:
<div id='b'><a οnclick="window.demo.clickOnAndroid(2)">b.c</a></div>
即可以实现互调,
5,下面让我们来看一个实例:
将我们需要的HTML代码预先写好放到assets文件夹下面:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登录</title>
<link rel="stylesheet" type="text/css" href="http://cdn.bootcss.com/bootstrap/3.2.0/css/bootstrap.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<style>
body{ background:none repeat scroll 0 0 #F8F8F8;}
</style>
</head>
<body>
<div class='main panel-body' style="margin-top:100px;">
<div class="login_bg">
<h2 class="text-center">超级管理后台</h2>
<form id="login" class="form-horizontal col-md-12" method="post" role="form" >
<div class="form-group">
<input type="text" class="form-control" placeholder="用户名" name="username" id="username">
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="密码" id="password">
</div>
<div class="form-group">
<button class="btn btn-lg btn-block btn-primary login" onClick="window.login.startFunction()" href="";>登录
</div>
</form>
</div>
</div>
<span id="content"></span>
<script type="text/javascript">
function updateHtml(){
document.getElementById("content").innerHTML = "你通过 android 中的控件调用了html 中js 的方法";
alert("dialog");
}
</script>
</body>
</html>
然后就是java代码:
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
public class WordActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asd);
//获取webView 控件
final WebView webview=(WebView)findViewById(R.id.webView1);
//加上这句话才能使用javascript方法
webview.getSettings().setJavaScriptEnabled(true);
//webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");
//加载assets目录下面的demo.html 界面
webview.loadUrl("file:///android_asset/index2.html");
//增加接口方法,让html页面调用
webview.addJavascriptInterface(this,"login");
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
webview.loadUrl("javascript:updateHtml()");
}
});
}
public void startFunction(){
AlertDialog.Builder ab=new AlertDialog.Builder(WordActivity.this);
ab.setTitle("提示");
ab.setMessage("通过js 调用了 java 中的方法");
ab.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ab.create().show();
}
}