Android+HTML——html在Android程序运行以及互相传值
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("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> <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="我是网页上按钮" onclick="showSelf()"> <input type="button" value="调用原生程序" onclick="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> <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="登录" onclick="denglu()"> </body> </html>
转载自:http://blog.csdn.net/zhangyufeng0126/article/details/52832179