android中java与js通信(可以用html来做页面,进行交互)
index.html的内容:
<html>
<head>
<scriptlanguage="JavaScript">
functioncallJS(arg){
document.getElementById('replaceme').innerHTML=arg;
}//android会来调用它
</script>
</head>
<body>
<h1>WebView</h1>
<p>
<ahref="#"onclick="window.alert('AlertfromJavaScript')">
DisplayJavaScriptalert</a>//该事件会被android截获
</p>
<p>
<ahref="#"onclick="window.android.callAndroid('HellofromBrowser')">
CallAndroidfromJavaScript</a>//js通过自己定义“android"接口来调用java类中的方法,"android"可以改成任意的,但必须和java中设置的接口名一致
</p>
<pid="replaceme">
</p>
</body>
</html>
Activity中设置:
packagecom.test.localbrowser;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.webkit.JsResult;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebView;
importandroid.widget.Button;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassLocalBrowserActivityextendsActivity{
privatestaticfinalStringTAG="LocalBrowser";
privatefinalHandlerhandler=newHandler();
privateWebViewwebView;
privateTextViewtextView;
privateButtonbutton;
privateclassAndroidBridge//这个类中提供各种js可调用的方法。
{
publicvoidcallAndroid(finalStringarg)
{
handler.post(newRunnable(){
publicvoidrun()
{
Log.d(TAG,"calAndroid("+arg+")");
textView.setText(arg);
}
});
}
}
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView=(WebView)findViewById(R.id.web_view);
textView=(TextView)findViewById(R.id.text_view);
button=(Button)findViewById(R.id.button);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(newAndroidBridge(),"android");//将那个实例化的函数类设置为”android"的js接口。
webView.setWebChromeClient(newWebChromeClient()
{
@Override
publicbooleanonJsAlert(WebViewview,Stringurl,Stringmessage,
JsResultresult){
Log.d(TAG,"onJsAlert("+view+","+url+","+message+","+result+")");
Toast.makeText(LocalBrowserActivity.this,message,3000).show();
result.confirm();
returntrue;
}
});//设置可以被java截获的js事件。
webView.loadUrl("file:///android_asset/index.html");
button.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
Log.d(TAG,"onClick("+v+")");
webView.loadUrl("javascript:callJS('hellofromandroid')");//java调用js的函数
}
});
}
}
有了这些基础,可以尝试用html做界面
更多相关文章
- Android消息机制不完全解析(上)
- Android(安卓)PVPlayer介绍
- android 接收监听开机广播
- 关于id的小知识
- android ActivityManagerService服务详解
- android基础---->Parcelable的使用
- android 中文api (84) —— TrafficStats
- android fragment ontouch 事件
- Android之Service学习篇一:Service启动方式之startService