Java代码与H5互调
界面布局就不说了,一个按钮
主要是核心代码
package com.example.androi_h5;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class JavaAndJSActivity extends Activity implements View.OnClickListener {
private EditText etNumber;
private EditText etPassword;
private Button btnLogin;
private WebView webView;
private void findViews() {
setContentView(R.layout.activity_java_and_js);
etNumber = (EditText) findViewById(R.id.et_number);
etPassword = (EditText) findViewById(R.id.et_password);
btnLogin = (Button) findViewById(R.id.btn_login);
btnLogin.setOnClickListener(this);
initWebView();
}
private void initWebView() {
webView = new WebView(this);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android" );
// webView.loadUrl("http://www.atguigu.com/");
//加载本地
webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");
setContentView(webView);
}
/**
* js可以调用该类的方法
*/
class AndroidAndJSInterface{
@JavascriptInterface
public void showToast(){
Toast.makeText(JavaAndJSActivity.this, "我被js调用了", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_and_js);
findViews();
}
@Override
public void onClick(View view) {
if (view == btnLogin) {
login();
}
}
private void login() {
String numebr = etNumber.getText().toString().trim();
String password = etPassword.getText().toString().trim();
if (TextUtils.isEmpty(numebr) || TextUtils.isEmpty(password)) {
Toast.makeText(JavaAndJSActivity.this, "账号或者密码为空", Toast.LENGTH_SHORT).show();
} else {
//登录
login(numebr);
}
}
private void login(String numebr) {
webView.loadUrl("javascript:javaCallJs(" + "'" + numebr + "'" + ")");
setContentView(webView);
}
}
这是加载本地的html,放在assets目录下的
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script type="text/javascript">
function javaCallJs(){
document.getElementById("content").innerHTML +=
"<br\>java调用了js无参函数";
}
function javaCallJs(arg){
document.getElementById("content").innerHTML =
("欢迎:"+arg );
}
function showDialog(){
alert("谷粉们你好,我是来自javascript");
}
</script>
</head>
<body>
<div align="left" id="content"> 谷粉</div>
<div align="right">光临尚硅谷</div>
<p><img src="http://atguigu.com/images/logo.gif"></p>
<input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />
</body>
</html>
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/holo_blue_light"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录页面"
android:textColor="@android:color/black"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_shap"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账号:"
android:textColor="#000000" />
<EditText
android:id="@+id/et_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入账号..."
android:textColor="#000000" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textColor="#000000" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码..."
android:password="true"
android:textColor="#000000" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:textColor="#000000"
android:textSize="25sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
记得加上联网权限