Android+HTML——html在Android程序运行以及互相传值
效果图:
相关代码:
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="c.example.myzyfandroid.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bt1"
android:text="android按钮"
/>
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wb"
android:layout_below="@+id/bt1"
android:layout_alignParentStart="true"></WebView>
</RelativeLayout>
package c.example.myzyfandroid;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1=(Button)findViewById(R.id.bt1);
wv=(WebView)findViewById(R.id.wb);
WebSettings ws=wv.getSettings();
ws.setJavaScriptEnabled(true);
ws.setSupportZoom(true);
wv.setWebViewClient(new WebViewClient());
wv.setWebChromeClient(new WebChromeClient());
wv.loadUrl("file:///android_asset/myAndroid.html");
/*在安卓程序中暴露出一个接口
参数1:java类
参数2:java类别名
*/
wv.addJavascriptInterface(new AsForjs(this),"Android");
final String str="传字符串";
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
wv.loadUrl("javascript:showAndroid('"+str+"');");
}
});
}
}
package c.example.myzyfandroid;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
/**
* Created by 冲天之峰 on 2016/10/12.
*/
public class AsForjs {
private Context context;
private String name1;
private String namepwd;
private String pwd2;
private static CallBack callBack;
public AsForjs(Context context){
this.context=context;
}
/*
通过注解@android.webkit.JavascriptInterface
关联 javaScript 接口
*/
@android.webkit.JavascriptInterface
public void show(){
Toast.makeText(context,"安卓程序调用成功",Toast.LENGTH_SHORT).show();
}
@android.webkit.JavascriptInterface
public void show(String str){
Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
}
@android.webkit.JavascriptInterface
public boolean showname(String name,String pwd){
name1=name;
pwd2=pwd;
namepwd=name+pwd;
Toast.makeText(context,"用户名:"+name+"密码:"+pwd,Toast.LENGTH_SHORT).show();
if (name.equals("123")&&pwd.equals("123")){
callBack.changeText(name1,pwd2);
Log.d("=====","233");
return true;
}
return false;
}
public String getname(){
return name1;
}
public String getPwd2(){
return pwd2;
}
public static void setCallBack(Context context){
callBack= (CallBack) context;
}
public interface CallBack{
public void changeText(String name,String pwd);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function showSelf() {
alert("我来自网页")
}
function showAndroid(str) {
alert(str)
}
//调用android程序
function callAndroid() {
Android.show('来自网页的我');
}
</script>
</head>
<body>
<input type="button" value="我是网页上按钮" οnclick="showSelf()">
<input type="button" value="调用原生程序" οnclick="callAndroid()">
</body>
</html>
登陆练习:
package c.example.myzyfandroid;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity implements AsForjs.CallBack{
private WebView wv;
private TextView tv;
private Button bt;
private AsForjs asForjs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
asForjs=new AsForjs(this);
asForjs.setCallBack(this);
bt=(Button)findViewById(R.id.bt) ;
tv=(TextView)findViewById(R.id.tv);
wv = (WebView) findViewById(R.id.wb);
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
ws.setSupportZoom(true);
wv.setWebViewClient(new WebViewClient());
wv.setWebChromeClient(new WebChromeClient());
wv.loadUrl("file:///android_asset/denglu.html");
/*在安卓程序中暴露出一个接口
参数1:java类
参数2:java类别名
*/
wv.addJavascriptInterface(asForjs, "Android");
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv.setText("用户名:"+asForjs.getname()+"密码:"+asForjs.getPwd2());
}
});
}
@Override
public void changeText(String name, String pwd) {
tv.setText("用户名:"+name+"密码:"+pwd);
}
}
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="c.example.myzyfandroid.Main2Activity">
<Button
android:layout_width="match_parent"
android:layout_height="120px"
android:text="显示用户名+密码"
android:id="@+id/bt"/>
<TextView
android:layout_width="match_parent"
android:layout_height="120px"
android:id="@+id/tv"
android:layout_below="@+id/bt"
android:layout_alignParentStart="true" />
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wb"
android:layout_below="@+id/tv"
android:layout_alignParentStart="true"></WebView>
</RelativeLayout>
package c.example.myzyfandroid;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
/**
* Created by 冲天之峰 on 2016/10/12.
*/
public class AsForjs {
private Context context;
private String name1;
private String namepwd;
private String pwd2;
private static CallBack callBack;
public AsForjs(Context context){
this.context=context;
}
/*
通过注解@android.webkit.JavascriptInterface
关联 javaScript 接口
*/
@android.webkit.JavascriptInterface
public void show(){
Toast.makeText(context,"安卓程序调用成功",Toast.LENGTH_SHORT).show();
}
@android.webkit.JavascriptInterface
public void show(String str){
Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
}
@android.webkit.JavascriptInterface
public boolean showname(String name,String pwd){
name1=name;
pwd2=pwd;
namepwd=name+pwd;
Toast.makeText(context,"用户名:"+name+"密码:"+pwd,Toast.LENGTH_SHORT).show();
if (name.equals("123")&&pwd.equals("123")){
callBack.changeText(name1,pwd2);
Log.d("=====","233");
return true;
}
return false;
}
public String getname(){
return name1;
}
public String getPwd2(){
return pwd2;
}
public static void setCallBack(Context context){
callBack= (CallBack) context;
}
public interface CallBack{
public void changeText(String name,String pwd);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function denglu() {
var name=document.getElementById("name");
var pwd=document.getElementById("pwd");
if( Android.showname(name.value,pwd.value)){
alert("登录成功");
}else{
alert("登录失败");
}
}
</script>
</head>
<body>
<table border="2px" style="border: 2px solid red" width="600px">
<tr>
<td>登录名:</td>
<td><input id="name" type="text" style="width: 96%" ></td>
</tr>
<tr>
<td>登录密码:</td>
<td><input id="pwd" type="password" style="width: 96%" ></td>
</tr>
</table>
<input type="button" value="登录" οnclick="denglu()">
</body>
</html>