主函数:
public class MainActivity extends AppCompatActivity {
@BindView(R.id.webview)
WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_html_call_java_);
ButterKnife.bind(this);
webview.loadUrl("file:///android_asset/test.html");
webview.setWebChromeClient(new WebChromeClient());//使用的是Chrome浏览器,只有使用Chrome浏览器才可以弹出HTML中自己的对话框
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
//addJavascriptInterface(Object object, String name)
webview.addJavascriptInterface(new MyObject(HTML_callJava_Activity.this),"myObj");
}
}
布局文件:
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</WebView>
MyObject:
public class MyObject {
Context context;
public MyObject(Context context) {
this.context = context;
}
//该方法将会暴露给JavaScript调用
@JavascriptInterface
public void showToast(String name) {
Toast.makeText(context, name + "你好", Toast.LENGTH_SHORT).show();
}
//该方法将会暴露给JavaScript调用
@JavascriptInterface
public void showList() {
new AlertDialog.Builder(context)
.setTitle("图书列表")
.setIcon(R.mipmap.ic_launcher)
.setItems(new String[]{"java基础", "Java高级进阶", "java网络编程", "MYSQL与GUI", "JAVA项目实战"}, null)
.setPositiveButton("确定", null)
.create()
.show();
;
}
}
test.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8"/>
<title>JS 调用Android(也可以说是js 调用Java)</title>
<script type="text/javascript">
alert("你好好,我是HTML中弹出的对话框")
</script>
</head>
<body>
<!--注意此处的myObj 是Android暴露出来的对象-->
<input
type="button"
value="打招呼"
onclick="myObj.showToast('孙悟空');"
/>
<input
type="button"
value="图书列表"
onclick="myObj.showList();"
/>
</body>
</html>