在android開發(fā)中經(jīng)常涉及到webview中java方法與js方法的相互調(diào)用椒振,在此我就小露一下身手。既然是相互調(diào)用梧乘,也就是說分為兩種情況:
1.js調(diào)用java方法澎迎。2.java調(diào)用js方法。話不多說选调,放代碼(多看代碼中的注釋)夹供。
1.java代碼:
public class TestWebViewActivity extends AppCompatActivity {
private WebView webView;
private EditText et_content;
private TextView submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_webview);
webView= (WebView) findViewById(R.id.webView);
et_content= (EditText) findViewById(R.id.content);
submit= (TextView) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg=et_content.getText().toString();
//2.java調(diào)用js方法
webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
}
});
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);
//wusir作為注入接口別名,在html的js代碼部分會(huì)用到仁堪。
webView.addJavascriptInterface(new JsInterface(),"wusir");
//為了方便測(cè)試哮洽,我在項(xiàng)目本地的asset中加入了html文件,實(shí)際開發(fā)時(shí)請(qǐng)換成后臺(tái)開發(fā)給的url弦聂。
webView.loadUrl("file:///android_asset/js_webview.html");
}
//1.js調(diào)用java方法鸟辅,定義注入接口JsInterface
private class JsInterface{
@JavascriptInterface
public void onSumResult(int result){
Toast.makeText(getApplicationContext(), result+"", Toast.LENGTH_LONG).show();
}
@JavascriptInterface
public void callPhone(String phone){
//調(diào)用手機(jī)系統(tǒng)電話功能
Uri uri = Uri.parse("tel:" + phone);
Intent dialIntent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(dialIntent);
}
}
}
2.activity對(duì)應(yīng)的布局代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--EditText和TextView用于java調(diào)用js方法-->
<EditText
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="60dp" />
<TextView
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="30dp"
android:text="提交內(nèi)容到webview的p標(biāo)簽"
android:textColor="#fff"
android:gravity="center"
android:background="@drawable/small_green_button"/>
<!--WebView用于js調(diào)用java方法-->
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="200dp"></WebView>
</LinearLayout>
3.js_webview.html代碼:
css代碼可以忽略,js代碼隨你放在head中,還是body中莺葫。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
#p1{
width: 100%;
height: 50px;
line-height: 50px;
color: #ffffff;
background-color: #0066ff;
}
</style>
</head>
<body>
<script type="text/javascript">
//1.js調(diào)用java方法
function sumToJava(){
window.wusir.onSumResult(1 + 2)
}
function callphone(){
window.wusir.callPhone("15757184616")
}
//2.java調(diào)用js方法
function showInfoFromJava(msg) {
document.getElementById("p1").innerHTML=msg;
}
</script>
<h3>1.js調(diào)用java方法實(shí)例</h3>
<button type="button" onclick="sumToJava()">1+2=</button>
<button type="button" onclick="callphone()">打電話</button>
<h3>2.java調(diào)用js方法實(shí)例</h3>
<p id="p1">Hello World!</p>
</body>
</html>
結(jié)語
好了匪凉,就是這些了,重點(diǎn)是不要混淆了1.js調(diào)用java方法捺檬、2.java調(diào)用js方法再层。如果有什么不妥之處請(qǐng)大佬指正。