1.创建一个空项目
用Android studio创建一个空项目
2. 初始化项目
将项目设置成project视图
点击src,选择new,新建一个文件夹
选择main\assets
将html文件放在该目录下(css、js等也都一起放过来)
3.编写代码
完整代码在后边,看第5部分。这里的只是为了便于划分代码功能
3.1 java调用js
java代码
button.setOnClickListener(view -> {
webView.loadUrl("javascript:responseJava('java调用js')");
});
JavaScript代码
function responseJava(str) {
$("#show").html(str)
}
3.2 js调用java
javascript代码
// 从js调用java方法
function requestJava(){
// 调用Java方法
window.AndroidToast.show(info)
}
java代码
public class AndroidToast {
/**
* 展示弹窗
* @param str html页面返回的输入的文本数据
*/
@JavascriptInterface
public void show(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
}
4.运行
4.1 java调用js
点击调用js按钮,可以看到网页上的文本发生了变化
4.2 js调用java
点击调用java按钮后可以看到安卓弹出消息条显示文本框内容
5. 整体代码
html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script src="jquery-1.8.3.js"></script>
<script>
// 从js调用java方法
function requestJava(){
info = $("#input_info").val()
$("#input_info").val(info + 1)
info = $("#input_info").val()
// 调用java代码
window.AndroidToast.show(info)
}
// 从java调用js方法
function responseJava(str) {
$("#show").html(str)
}
</script>
<body>
<input id="input_info" />
<button id="html_btn" onclick="requestJava()">调用java</button>
<p id="show">暂无调用</p>
</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">
<!-- 网页布局 -->
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="500dp" />
<Button
android:id="@+id/call_js"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="调用js" />
</LinearLayout>
效果如下图:
主活动java代码
package priv.happy.java_js_eachother;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.web_view);
// 加载网页
webView.loadUrl("file:///android_asset/index.html");
// 初始化
WebSettings webSettings = webView.getSettings();
// 允许js
webSettings.setJavaScriptEnabled(true);
// 设置默认字符编码
webSettings.setDefaultTextEncodingName("UTF-8");
// 添加js接口
webView.addJavascriptInterface(new AndroidToast(), "AndroidToast");
Button button = findViewById(R.id.call_js);
button.setOnClickListener(view -> {
webView.loadUrl("javascript:responseJava('java调用js')");
});
}
// 自定义的消息提示类
// @JavascriptInterface:作用是把AndroidToast类映射为Javascript中的AndroidToast对象
public class AndroidToast {
/**
* 展示弹窗
* @param str html页面返回的输入的文本数据
*/
@JavascriptInterface
public void show(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
}
}
参考