package com.android_js;

/**
* Demo描述:
* JavaScript与Android中的方法
* 的相互调用
*/
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings.TextSize;
import android.webkit.WebView;
import android.widget.Button;

@SuppressLint("JavascriptInterface")
public class MainActivity extends Activity {
private WebView mWebView;
private Button mButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}

private void init() {

// 以下为Javascript调用Java--------------------------
mWebView = (WebView) findViewById(R.id.webView);
initWebViewSettings();
// 加载本地Html文件
mWebView.loadUrl("file:///android_asset/test.html");
// 注意:
// addJavascriptInterface方法中第二参数
// 它表示我们的java对象javaClass的别名.这样js就可以通过该别名来调用Android中的方法
// 即js代码中的:
// window.testjs.firstFunction
// window.testjs.secondFunction
JavaClass javaClass = new JavaClass(MainActivity.this);
mWebView.addJavascriptInterface(javaClass, "testjs");
// 以下为Java调用Javascript--------------------------
// 注意:
// 在调用带参数的Javascript方法时
// 参数的写法,如此处的
// mWebView.loadUrl("javascript:javacalljswithargs("+"'stringArg'"+")");
// 不加单引号是错误的
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 调用Javascript中的无参方法
mWebView.loadUrl("javascript:javacalljs()");
// 调用Javascript中带参数的方法
mWebView.loadUrl("javascript:javacalljswithargs("
+ "'stringArg'" + ")");

}
});
}

private void initWebViewSettings() {
mWebView.setVerticalScrollBarEnabled(true);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setDomStorageEnabled(true);
//mWebView.getSettings().setPluginsEnabled(true);
mWebView.requestFocus();
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
}

}

package com.android_js;

import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class JavaClass {
private Context mContext;

public JavaClass(Context context) {
this.mContext = context;
}

public void firstFunction() {
Toast.makeText(mContext, "Javascipt调用Java中的方法,未携带参数",
Toast.LENGTH_SHORT).show();
}

public void secondFunction(String string) {
Toast.makeText(mContext, "Javascipt调用Java中的方法,携带参数为:" + string,
Toast.LENGTH_SHORT).show();
}
public void changeFunction(){
Intent i = new Intent(mContext, LoginActivity.class);
mContext.startActivity(i);
Toast.makeText(mContext, "跳转到登录页面", Toast.LENGTH_SHORT).show();
}
}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="370dip"
android:layout_centerHorizontal="true" />

<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="点击后Java调用Javascript" />

</RelativeLayout>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript">
function javacalljs(){
document.getElementById("content").innerHTML +=
"<br\>java调用了JavaScript函数未携带参数";
}

function javacalljswithargs(arg){
document.getElementById("content").innerHTML +=
("<br\>java调用了JavaScript函数,参数为:"+arg);
}

</script>
</head>
<body>
测试Android与avascript的交互<br/>
<br>
<a onClick="window.testjs.firstFunction()">点击后jvascript调用java代码</a><br/>
<br>
<a onClick="window.testjs.secondFunction('arg')" >点击后avascript调用java代码并携带参数</a><br/>
<br/>
<a onClick="window.testjs.changeFunction()">点击跳转到登录页面(这是写在html中的)</a> <br/>
<br>
<div id="content">以下为java调用Javascript时的提示信息:</div>
</body>
</html>

package com.android_js;

import android.app.Activity;
import android.os.Bundle;

public class LoginActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity);
}
}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="这是登录页面"
android:textSize="18sp" />

</RelativeLayout>

最后别忘了在AndroidManifast.xml中给LoginActivity.java注册

更多相关文章

  1. android 动态壁纸
  2. Android中利用DisplayMetrics取得手机屏幕大小
  3. 全屏
  4. Android(安卓)Material Design之CoordinatorLayout
  5. Android(安卓)ListView简单实用
  6. Android(安卓)打开浏览器的几种方法
  7. android打电话,接电话,挂电话过程
  8. android onTouch()与onTouchEvent()的区别
  9. Understanding Android's LayoutInflater.inflate()

随机推荐

  1. 学习进度2020.02.03
  2. 获取Android(安卓)Device的信息
  3. android:numeric="integer"属性
  4. Android(安卓)实时动态刷新更改菜单
  5. Android各种调用
  6. android 实现圆形头像
  7. Android(安卓)应用签名
  8. android之启动桌面activity
  9. Android(安卓)Timer计时器简单写法
  10. Android创建文件夹及文件并写入数据