当前位置:   article > 正文

Android——最简单的 Android H5 混合开发_android h5混合开发框架

android h5混合开发框架

安卓 与 Web JS 交互的操作,其实网上一搜,教程案例都已经满大街了,但GT库还是向 Web JS 交互出手了,要问为啥,因为博主是个懒鬼,不想写太多代码,其实我们都知道 原版的WebView 是有很多问题的,内存泄露,数据安全性,Js不友好支持等等一些列问题,都要自己去手动编码置解决,GT库 封装好的Web 避了很多原版 Web的许多坑,博主不想以后每次用到 Js 交互都写一套,而且博主自己在用了封装好的 JS 交互后,简直不要太爽。忍不住要和家人们分享,嘿嘿。

GT库依旧保持简易开发扩展性开发 ,在浅浅的开发功能上可以直接使用,在想深入开发时可以有较好的扩展,尽量少写代码。

目录

 使用GT库里的,当然需要先依赖好GT库啦:

 Html代码:demo.html

activity_main.xml布局:

WebViews.java 代码(核心)

MainActivity.java 代码 (如何使用WebViews)

咋们再来从 WebViews 类中多加一些方法:

这次里面增加了这些方法:

Android 嵌套 H5 进行下载文件操作:

Android 嵌套 H5 进行 拍照、相册、视频、拍摄视频、文件上传等操作:

GT库 JS 交互 高级用法:

1.查找元素: 查到到具体元素后进行其他操作

2.设置/替换 参数

3.隐藏/显示

4.设置 单击事件/单击链接

设置单击跳转链接:

设置单击调用 Js 方法并传参:

设置单击调用 Android 暴露的方法并传参:

万能JS 交互 API:


 使用GT库里的,当然需要先依赖好GT库啦:

GitHub - 1079374315/GTContribute to 1079374315/GT development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/1079374315/GT

好了,咋们直接上效果图:(为了保证逻辑不复杂,博主已经非常简了)

效果图已经很明了的展现了 Android 与 网页的交互了,双方互发消息与互接收消息,接下来咋们来看看代码:

 Html代码:demo.html

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>最简单的JS交互</title>
  5. <script>
  6. //读取安卓传递过来的数据并弹窗
  7. function readData(json){
  8. alert("读取到安卓数据:" + json)
  9. }
  10. //发送消息给安卓
  11. function sendData(){
  12. var appData = "2023年";
  13. <!-- 注意核心内容:这里的 com_zuanuniverse_myapplication_WebViews 的这个值,由Android端的 jsToAndroidName 值提供 -->
  14. <!-- 所以这里的 com_zuanuniverse_myapplication_WebViews 需要用到Android端最新的 jsToAndroidName 值,将这个值打印看日志即可明白 -->
  15. com_zuanuniverse_myapplication_WebViews.sendH5Data(appData)
  16. }
  17. </script>
  18. </head>
  19. <body>
  20. <button onclick="sendData()">发送json信息</button>
  21. </body>
  22. </html>

够简单吧!两个方法,一个是读取方法,一个是 单击Web按钮发送方法。

需要将 demo.html 文件放在 这个目录下面,等待被加载:

咋们再看看安卓这边代码:

activity_main.xml布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. >
  7. <!-- Web 容器 -->
  8. <RelativeLayout
  9. android:id="@+id/rl"
  10. android:layout_width="match_parent"
  11. android:layout_height="0dp"
  12. android:background="#D19898"
  13. app:layout_constraintDimensionRatio="h,1:1"
  14. app:layout_constraintStart_toStartOf="parent"
  15. app:layout_constraintTop_toTopOf="parent" />
  16. <Button
  17. android:id="@+id/btn_send"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="发送数据到 Web"
  21. app:layout_constraintBottom_toBottomOf="parent"
  22. app:layout_constraintEnd_toEndOf="parent"
  23. app:layout_constraintStart_toStartOf="parent"
  24. app:layout_constraintTop_toBottomOf="@+id/rl"
  25. app:layout_constraintVertical_bias="0.066" />
  26. </androidx.constraintlayout.widget.ConstraintLayout>

WebViews.java 代码(核心)

  1. public class WebViews extends GT.GT_WebView.AnnotationWebView {
  2. //必须要写的
  3. public WebViews(Context context, ViewGroup viewGroup) {
  4. super(context, viewGroup);
  5. }
  6. //如果没需要初始化的东西,该方法可以不写
  7. @Override
  8. protected void initView(Context context, WebView webView) {
  9. super.initView(context, webView);
  10. //TODO 该参数 jsToAndroidName 是属于封装类里的,无法修改仅仅用来提供给 H5开发者
  11. GT.logt("与H5通讯的对象:" + jsToAndroidName);
  12. //TODO 注意核心数据: 这里的 jsToAndroidName 就是 提供给 H5 的 (com_zuanuniverse_myapplication_WebViews) 值
  13. }
  14. //读取 Web 传递过来的数据
  15. @Override
  16. public void readData(String json) {
  17. super.readData(json);
  18. GT.toast(context, "读取到 JS 发送的消息:" + json);//使用吐司显示
  19. //这里建议与H5通讯使用 json 通讯,可以根据不同的 code编号 类型来处理不同的业务逻辑,
  20. // 实在不能满足需求才使用暴露方法给H5,一般与H5商量好通讯协议,大多数逻辑都能完成的。
  21. }
  22. }

核心代码在这,集成GT库封装好的 AnnotationWebView 类,在重写 readData 方法进行读取数据,读取到后进行用吐司显示。看完是不是很神奇,一般想要接收到 H5 发送过来的数据需要用注解@JavascriptInterface 标识才能收到数据,但这里直接重写 readData 就能收到数据,那是因为GT库都帮咋们封装好了。让开发者只要专心与业务逻辑不操心数据传递的等等。

MainActivity.java 代码 (如何使用WebViews)

  1. public class MainActivity extends AppCompatActivity {
  2. private WebViews webView;
  3. private RelativeLayout rl;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. rl = findViewById(R.id.rl);//获取网页容器
  9. webView = new WebViews(this, rl);//初始化 WebViews 并设置好WebView 容器
  10. webView.loadAsset("demo.html");//本地调试地址
  11. findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View view) {
  14. webView.sendAndroidData("2022年");//发送了数据给 Web
  15. }
  16. });
  17. }
  18. @Override
  19. protected void onDestroy() {
  20. super.onDestroy();
  21. webView.finish();//会自动释放资源
  22. }
  23. }

写到这里就可以直接允许测试了,实例化 WebViews 并设置扔进容器里,一个安卓按钮单击后向 H5 发送数据,够简单吧~

而且只要在发送的后面加一个接口,就可以直接接收到 H5 处理过后的数据:

  1. findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View view) {
  4. //发送了数据给 Web
  5. webView.sendAndroidData(25, new GT.OnListener<String>() {
  6. @Override
  7. public void onListener(String... obj) {
  8. GT.logt("经过H5处理过的数据:" + obj[0]);
  9. }
  10. });
  11. }
  12. });

然后 Html 也要增加一个处理逻辑:(就是简单的将 25 * 2 返回给安卓)

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>最简单的JS交互</title>
  5. <script>
  6. //读取安卓传递过来的数据并弹窗
  7. function readData(json){
  8. alert("读取到安卓数据:" + json)
  9. return json * 2;
  10. }
  11. //发送消息给安卓
  12. function sendData(){
  13. var appData = "2023年";
  14. com_zuanuniverse_myapplication_WebViews.sendH5Data(appData)
  15. }
  16. </script>
  17. </head>
  18. <body>
  19. <button onclick="sendData()">发送json信息</button>
  20. </body>
  21. </html>

看到这个,搞过 安卓 JS 交互的童靴们就会有个疑惑,

文中的 H5 通过 com_zuanuniverse_myapplication_WebViews.sendH5Data(appData)发送数据给安卓,那这段 com_zuanuniverse_myapplication_WebViews 是从哪里获取的呢?

答案是:从 WebViews 类中获取。

咋们再来从 WebViews 类中多加一些方法:

  1. public class WebViews extends GT.GT_WebView.AnnotationWebView {
  2. //必须要写的
  3. public WebViews(Context context, ViewGroup viewGroup) {
  4. super(context, viewGroup);
  5. }
  6. //如果没需要监听网页加载进度的功能,该方法可以不写
  7. @Override
  8. public void loadProgress(int progress) {
  9. super.loadProgress(progress);
  10. GT.logt("progress:" + progress);//网页加载进度条
  11. }
  12. //如果没需要初始化的东西,该方法可以不写
  13. @Override
  14. protected void initView(Context context, WebView webView) {
  15. super.initView(context, webView);
  16. // 该参数 jsToAndroidName 是属于封装类里的,无法修改仅仅用来提供给 H5开发者
  17. GT.logt("与H5通讯的对象:" + jsToAndroidName);
  18. }
  19. //读取 Web 传递过来的数据
  20. public void readData(String json) {
  21. super.readData(json);
  22. GT.logt("读取到 JS 发送的消息:" + json);
  23. //这里建议与H5通讯使用 json 通讯,可以根据不同的 code编号 类型来处理不同的业务逻辑,
  24. // 实在不能满足需求才使用暴露方法给H5,一般与H5商量好通讯协议,大多数逻辑都能完成的。
  25. }
  26. //暴露给 H5 自动获取登录信息
  27. @JavascriptInterface
  28. public String getUserId() {
  29. return "userId = 666";
  30. }
  31. //如果没需要初始化的东西,该方法可以不写
  32. @Override
  33. public void onDestroy() {
  34. super.onDestroy();
  35. GT.logt("Web已被销毁");
  36. }
  37. }

这次里面增加了这些方法:

loadProgress(用于监听网页加载进度)、

initView(初始化业务逻辑东西)、

getUserId(暴露给H5调用的方法)、

onDestroy(监听销毁方法),

而其中的 jsToAndroidName 参数就是专门提供给 H5 开发者使用的对象参数

运行日志:

 新增的方法中,有一个暴露给H5 调用的方法的,这个H5那边咋使用呢

咋们来改改 Html 代码

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>最简单的JS交互</title>
  5. <script>
  6. //调用安卓那边的 getUserId 方法来获取 安卓返回的值
  7. var userId = com_zuanuniverse_myapplication_WebViews.getUserId();
  8. alert("主动获取的数据:" + userId)
  9. //读取安卓传递过来的数据并弹窗
  10. function readData(json){
  11. alert("读取到安卓数据:" + json)
  12. }
  13. //发送消息给安卓
  14. function sendData(){
  15. var appData = "2023年";
  16. com_zuanuniverse_myapplication_WebViews.sendH5Data(appData)
  17. }
  18. //单击 按钮后获取 安卓暴露方法返回值
  19. function getUserId(){
  20. var userId = com_zuanuniverse_myapplication_WebViews.getUserId();
  21. alert("按下按钮后 主动获取的数据:" + userId)
  22. }
  23. </script>
  24. </head>
  25. <body>
  26. <button onclick="sendData()">发送json信息</button>
  27. <br/>
  28. <button onclick="getUserId()">获取安卓信息</button>
  29. </body>
  30. </html>

运行效果图:

 显示调用了主动调用的 getUserId 然后再单击按钮调用 getUserId 方法,再调用安卓的方法,这个暴露的使用方式与原生的使用是一样的,所以GT库封装对原生是有较好扩展性的。

当前,GT库封装的 WebView 还对加载其他类型的网页数据进行了兼容:

  1. webView.loadWeb("https://blog.csdn.net/qq_39799899");//调用网络网页
  2. webView.loadHtmlCode("");//加载富文本
  3. webView.loadSdCard("");//加载SD卡路径的html

另外提供简易版 Json 格式,供伙伴们自定义编写:

  1. {
  2. "code":1,
  3. "msg":"",
  4. "data":{
  5. "userId":0,
  6. "appData":"某某某类型"
  7. },
  8. "errorCode":""
  9. }

Android 嵌套 H5 进行下载文件操作:

H5代码:

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>最简单的JS交互</title>
  5. </head>
  6. <body>
  7. <a href="https://gitcode.net/qq_39799899/gtk/-/raw/master/GTK/dlbbx-v1.0.0-20231029-2125.apk">下载文件</a>
  8. <br/>
  9. </body>
  10. </html>

Android代码:

  1. public class WebViews extends GT.GT_WebView.AnnotationWebView {
  2. //必须要写的
  3. public WebViews(Context context, ViewGroup viewGroup) {
  4. super(context, viewGroup);
  5. }
  6. //监听到 网页有点击下载链接
  7. @Override
  8. public void onDownloadFile(String downloadUrl, String userAgent, String contentDisposition, String mimetype, String fileSize, long contentLength) {
  9. super.onDownloadFile(downloadUrl, userAgent, contentDisposition, mimetype, fileSize, contentLength);
  10. GT.logt("下载文件路径:" + downloadUrl);
  11. //下载对话框,可自行定义...
  12. }
  13. }

Android 嵌套 H5 进行 拍照、相册、视频、拍摄视频、文件上传等操作:

注意:其实GT库默认支持 拍照、相册、视频、拍摄、文件上传功能逻辑,H5那边可以直接通过以下代码进行调用Android进行选择图片并上传

默认逻辑效果图:

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>交互信息</title>
  5. <script>
  6. function displayimg(input){
  7. //获取第一个文件对象 (如果有多张时可使用循环files数组改变多个<img>的 src值)
  8. var file = input.files[0];
  9. //判断当前是否支持使用FileReader
  10. if(window.FileReader){
  11. //创建读取文件的对象
  12. var fr = new FileReader();
  13. //以读取文件字符串的方式读取文件 但是不能直接读取file
  14. //因为文件的内容是存在file对象下面的files数组中的
  15. //该方法结束后图片会以data:URL格式的字符串(base64编码)存储在fr对象的result中
  16. fr.readAsDataURL(file);
  17. fr.onloadend = function(){
  18. document.getElementById("img").src = fr.result;
  19. }
  20. }
  21. }
  22. </script>
  23. </head>
  24. <body>
  25. </br>
  26. <img style="width: 200px" id="img" src="">
  27. </br>
  28. <a>相册</a><input type="file" onchange="displayimg(this)" accept="image/*" capture></br></br>
  29. <a>拍照</a><input type="file" onchange="displayimg(this)" accept="photograph/*" capture></br></br>
  30. <a>视频</a><input type="file" onchange="displayimg(this)" accept="video/*" capture></br></br>
  31. </body>
  32. </html>

当然也支持自定义处理图片选择监听:

  1. //监听h5选择文件类型
  2. override fun onShowFileChoosers(acceptType: String?): Boolean {
  3. //默认支持这五种操作,若只需要其中1-5种,可以只设置需要组件的名字来显示该组件。
  4. //(支持自定义按钮名称,注释下面任意1-4个组件试试)
  5. setPhotoName("相册图片")//设置 相册图片 按钮名称
  6. setPhotographName("拍照")//设置 拍照 按钮名称
  7. setVideoName("相册视频")//设置 相册视频 按钮名称
  8. setShootVideoName("拍摄视频")//设置 拍摄视频 按钮名称
  9. setFileName("上传文件")//设置 上传文件 按钮名称
  10. setCancelName("取消")//设置 取消 按钮名称 (可自定义取消按钮名字)
  11. //可以进行自定义处理 返回true代表使用GT库默认封装逻辑,返回 false,代表自定义文件上传逻辑
  12. return super.onShowFileChoosers(acceptType)//默认返回 true
  13. }

还支持 Adnroid 获取 H5 选择的资源

  1. //接收 H5 选择的相册图片资源
  2. override fun onFeedbackFile(bitmap: Bitmap?) {
  3. super.onFeedbackFile(bitmap)
  4. }
  5. //接收 H5 选择的视频、文件资源
  6. override fun onFeedbackFile(uri: Uri?) {
  7. super.onFeedbackFile(uri)
  8. }

GT库 JS 交互 高级用法:

具体功能就是对 H5 进行侵入式开发,啥叫侵入式开发?简单点就是说可以在安卓端动态修改 H5 代码,例如某某视频网站有个广告去不掉,咋们可以使用 H5 侵入式开发将 广告弹窗等元素,直接隐藏掉,或者替换成自己的广告图片,听起来很奈斯吧。

目前GT库封装的 API 仅仅涉及以下方面:

(今后需要或宝子们有需要可以私信我或评论区留言,博主后面加上)

1.查找元素
2.设置/替换 参数
3.隐藏/显示
4.设置 单击事件/单击链接

Html 演示代码:

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>交互信息</title>
  5. <script>
  6. function aaa(value){
  7. alert("value:" + value)
  8. }
  9. </script>
  10. </head>
  11. <body>
  12. <div id="id_div" title="已加入 CSDN 5年" class="person-code-age" style="background-color:#C7E9FD;color:#1E68D8;" data-v-d1dbb6f8="">
  13. <img src="https://img-home.csdnimg.cn/images/20210108035952.gif" alt="" data-v-d1dbb6f8="">
  14. <span data-v-d1dbb6f8="">码龄5年</span>
  15. </div> </br>
  16. <a id="id_a" class="class_a" name="name_a" >A</a>
  17. </body>
  18. </html>

1.查找元素: 查到到具体元素后进行其他操作

  1. //Html 代码参考: <a id="id_a" class="class_a" name="name_a" >A</a>
  2. webView.findViewById("id_a");//根据元素 ID 查找元素
  3. webView.findViewByClassName("class_a");//根据元素 className属性 查找第1位元素
  4. webView.findViewByClassName("class_a",0);//根据元素 className属性 查找第1位 元素
  5. webView.findViewByClassNames("class_a");//根据元素 className属性 查找多位元素
  6. webView.findViewByName("name_a");//根据元素 Name属性 查找第1位元素
  7. webView.findViewByName("name_a",0);//根据元素 Name属性 查找第21位 元素
  8. webView.findViewByNames("name_a");//根据元素 Name属性 查找多位元素
  9. webView.findViewByTagName("a");//根据元素 a标签 查找第1位元素
  10. webView.findViewByTagName("a",0);//根据元素 a标签 查找第1位 元素
  11. webView.findViewByTagNames("a");//根据元素 a标签 查找多位元素
  12. /**
  13. //html 代码参考
  14. <script>
  15. var myH1 = document.createElement("h1");
  16. </script>
  17. */
  18. webView.findViewByViewName("myH1");//根据自定义的 View变量名 查找元素

2.设置/替换 参数

效果图:

 具体执行代码:

  1. //webView 是 来自于集成实现 GT封装库的
  2. webView.beginTransaction();//开启事务 (必要的)
  3. //获取到 img 标签后替换 图片
  4. webView.findViewByTagName("img").setImgUrl("https://csdnimg.cn/identity/blog4.png");
  5. webView.findViewByTagName("span").setText("码龄100年");//修改a标签的 文本内容
  6. webView.findViewByTagName("span").setTextSize(18);//修改a标签的 文字大小
  7. webView.findViewByTagName("span").setTextColor("red");//修改a标签的 文字颜色
  8. //创建一个新的 图片元素
  9. webView.newImgView("myImg","https://profile.csdnimg.cn/7/5/9/1_qq_39799899");
  10. //获取到 a标签,并将新创建的 图片元素 添加到 a标签内
  11. webView.findViewById("id_a").addView("myImg");
  12. //并将新创建的 图片元素 添加到 body 内
  13. //webView.addBodyView("myImg");
  14. String commit = webView.commit();//提交事务 (必要的)
  15. GT.logt("查看最终执行的JS代码:" + commit);

3.隐藏/显示

效果图:

  具体执行代码:

  1. //webView 是 来自于集成实现 GT封装库的
  2. webView.beginTransaction();//开启事务 (必要的)
  3. //获取到 div 隐藏
  4. webView.findViewByTagName("div").setHide();
  5. //获取到 div 显示
  6. //webView.findViewByTagName("div").setShow();
  7. //自定义 隐藏元素属性
  8. //webView.findViewByTagName("div").setShowOrHide(true,"none");
  9. webView.commit();//提交事务 (必要的)

4.设置 单击事件/单击链接

设置单击监听 效果图:

 实现代码:

  1. //单击安卓按钮
  2. findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. //webView 是 来自于集成实现 GT封装库的
  6. webView.beginTransaction();//开启事务 (必要的)
  7. //获取到 a 标签元素后 设置单击事件监听
  8. webView.findViewById("id_a").setOnClickListener(new GT.OnListener() {
  9. @Override
  10. public void onListener(Object[] obj) {
  11. GT.toast(MainActivity.this,"单击了 a 标签");//监听后弹出吐司
  12. }
  13. });
  14. webView.commit();//提交事务 (必要的)
  15. }
  16. });

 够简单吧,但注意,一定一定一定不能在未加载完 Web 的情况下注册单击监听,必须必须要 Web完全加载完后才能注册单击事件

设置单击跳转链接:

效果图:

 实现代码:

  1. //单击安卓按钮
  2. findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. //webView 是 来自于集成实现 GT封装库的
  6. webView.beginTransaction();//开启事务 (必要的)
  7. //获取到 a 标签元素后 设置单击跳转链接
  8. webView.findViewById("id_a").setOnClickLink("https://blog.csdn.net/qq_39799899");
  9. webView.commit();//提交事务 (必要的)
  10. }
  11. });

设置单击调用 Js 方法并传参:

效果图:

 实现代码:

  1. //单击安卓按钮
  2. findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. //webView 是 来自于集成实现 GT封装库的
  6. webView.beginTransaction();//开启事务 (必要的)
  7. //获取到 a 标签元素后 设置单击调用 JS 的 aaa 方法,并传参过去
  8. webView.findViewById("id_a").setOnClickFunction("aaa('GT库调用JS成功!')");
  9. webView.commit();//提交事务 (必要的)
  10. }
  11. });

设置单击调用 Android 暴露的方法并传参:

效果图:

 实现代码: 给 a标签 设置单击就调用  WebViews 类里的 getTokenId 方法

  1. public class WebViews extends GT.GT_WebView.AnnotationWebView {
  2. //必须要写的
  3. public WebViews(Context context, ViewGroup viewGroup) {
  4. super(context, viewGroup);
  5. }
  6. @JavascriptInterface
  7. public void getTokenId(String value) {
  8. GT.toast(context,"被Js触发了安卓方法成功:" + value);
  9. }
  10. }

MainActivity代码:

  1. //单击安卓按钮
  2. findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. //webView 是 来自于集成实现 GT封装库的
  6. webView.beginTransaction();//开启事务 (必要的)
  7. //获取到 a 标签元素后 设置单击调用安卓暴露的 getTokenId 方法并传参
  8. webView.findViewById("id_a").setOnClickAndroidFunction("getTokenId('GT库数据')");
  9. webView.commit();//提交事务 (必要的)
  10. }
  11. });

够简单吧,这些就是GT库目前版本已经封装好的 API ,其实只要你会 JS 代码,其实就知道还有很多很多骚操作,但博主精力有限,目前 GT库 仅仅将最基础的 API 提供给宝子们,会JS 语言的如果觉得这里还不能满足你的邪恶,可以再用下面这个万能的 JS API 来实现邪恶的想法。

万能JS 交互 API:

效果图:

 实现代码:

  1. //单击安卓按钮
  2. findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. //webView 是 来自于集成实现 GT封装库的
  6. webView.beginTransaction();//开启事务 (必要的)
  7. //获取到 a 标签元素后 设置单击调用安卓暴露的 getTokenId 方法并传参
  8. webView.addJsCode(
  9. "document.getElementById('id_a').onclick = function(){ alert('GT库不止这一个好用的功能哦!') }; "
  10. );
  11. webView.commit();//提交事务 (必要的)
  12. }
  13. });

够简单吧,今后有改变,会接着在这篇文章下面添加的,该篇文章值得收藏哦,

感谢观看~

下篇再见~

点个关注点个赞呗(〃'▽'〃)   关注博主最新发布库:GitHub - 1079374315/GT

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/247488
推荐阅读
相关标签
  

闽ICP备14008679号