目录
首先在界面文件中使用WebView控件(activity_main.xml)
在Android应用中建一个java对象,并将该对象暴露给JavaScript脚本
MainActivity:webView.loadUrl("文件地址")
实现效果截图:(html中的控件调用Android里面的方法)
-
首先在界面文件中使用WebView控件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/show"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
-
在Android应用中建一个java对象,并将该对象暴露给JavaScript脚本
java文件中建MyObject:
public class MyObject {
private Context context;
public MyObject(Context c) {
this.context = c;
}
@JavascriptInterface
public void showToast(String name){
Toast.makeText(context, "您好!"+name, Toast.LENGTH_SHORT).show();
}
}
-
MainActivity:webView.loadUrl("文件地址")
//启用JavaScript调用功能
webView.setJavaScriptEnabled(true);//将对象暴露给JavaScript脚本
webView.addJavascriptInterface(new MyObject(this),"myObj");
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.show);
webView.loadUrl("file:///android_asset/test.html");
webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyObject(this),"myObj");
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//自适应屏幕
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
}
}
-
建assets文件
test.html文件内容:
在JavaScript脚本中通过刚才暴露的name对象调用Android方法。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<!-- 自适应屏幕-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="button" value="打招呼" onclick="myObj.showToast('哈哈哈');">
</body>
</html>
通过以上的操作,可以实现简单的WebView中的JavaScript脚本调用Android方法,希望可以帮助到有需要的人,喜欢的可以点赞收藏噢~