展示

源码

web端

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport"content="width=device-width,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"><title>WebView 页面</title><link rel="shortcut icon" href="./imgs/avatar.png" type="image/png"><link rel="stylesheet" href="./css/index.css"><script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script><script src="./js/index.js"></script>
</head><body><input id="text" type="text" placeholder="请输入" /><button onclick="handleAndroidFun()">交互</button><script>const handleAndroidFun = () => {let { value } = document.getElementById('text');const str = Android.ShowToast(value);console.log(Android, str);}</script>
</body></html>

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"android:background="@color/colorPrimary"android:paddingLeft="10dp"android:paddingRight="10dp"android:layout_marginBottom="5dp"><ImageViewandroid:id="@+id/icon"android:layout_width="30dp"android:layout_height="match_parent"android:src="@drawable/avatar"/><TextViewandroid:id="@+id/title"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="@string/app_name"/><Buttonandroid:id="@+id/refresh"android:layout_width="60dp"android:layout_height="match_parent"android:background="@android:color/transparent"android:text="刷新"/><Buttonandroid:id="@+id/js_btn"android:layout_width="60dp"android:layout_height="match_parent"android:background="@android:color/transparent"android:text="调js"/></LinearLayout><RelativeLayoutandroid:id="@+id/content_layout"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

脚本

using Android.App;
using Android.Content;
using Android.Graphics;
using Android.OS;
using Android.Views;
using Android.Webkit;
using Android.Widget;
using Java.Interop;
using Java.Lang;namespace PrimaryBlankApp
{[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]public class MainActivity : Activity{public static ImageView IconView;public static TextView TitleView;private WebView _webView;private long _exitTime;protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);SetContentView(Resource.Layout.activity_main);IconView = FindViewById<ImageView>(Resource.Id.icon);TitleView = FindViewById<TextView>(Resource.Id.title);var refresh = FindViewById<Button>(Resource.Id.refresh);var jsBtn = FindViewById<Button>(Resource.Id.js_btn);var contentLayout = FindViewById<RelativeLayout>(Resource.Id.content_layout);_webView = new WebView(this);_webView.LayoutParameters =new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);_webView.SetWebChromeClient(new MyWebChromeClient());_webView.Settings!.JavaScriptEnabled = true; // 允许执行js脚本// 必须,参数一为供前端使用的对象Value(仅暴露的),参数二为供前端使用的对象Key_webView.AddJavascriptInterface(new JavaScriptMethod(this), "Android"); _webView.LoadUrl("http://10.10.1.184:5500/");contentLayout?.AddView(_webView);// 监听WebView滚动_webView.ScrollChange += (sender, args) => { JavaScriptMethod.ShowToast($"监听网页滚动 ---> {args.ScrollY}"); };// 刷新if (refresh != null)refresh.Click += delegate { _webView.Reload(); };// 调jsif (jsBtn != null)jsBtn.Click += delegate { _webView.LoadUrl("javascript:handleAndroidFun()"); };}// 返回键public override void OnBackPressed(){// 判断网页是否能后退,可以则后退if (_webView.CanGoBack())_webView.GoBack();// 网页不能后退,则连续点击两次间隔不超过2000退出Appelse{if (JavaSystem.CurrentTimeMillis() - _exitTime > 2000){Toast.MakeText(this, "再按一次退出程序", ToastLength.Short)?.Show();_exitTime = JavaSystem.CurrentTimeMillis();}elsebase.OnBackPressed();}}// 前端的方法类private class JavaScriptMethod : Object{private static Context _context;public JavaScriptMethod(Context context){_context = context;}// 需要引入 Mono.Android.Export.dll[Export("ShowToast")] // 暴露给前端的方法名称[JavascriptInterface] // 将方法暴露给前端public static string ShowToast(string str){Toast.MakeText(_context, str, ToastLength.Short)?.Show();return str;}}}internal class MyWebChromeClient : WebChromeClient{public override void OnReceivedIcon(WebView view, Bitmap icon){MainActivity.IconView.SetImageBitmap(icon);base.OnReceivedIcon(view, icon);}public override void OnReceivedTitle(WebView view, string title){MainActivity.TitleView.Text = title;base.OnReceivedTitle(view, title);}}
}

Android(五十七):WebView - 获取网页logo和标题、监听页面滚动、刷新页面、两端交互相关推荐

  1. Android WebView获取网页中JavaScript弹框内容

    Android WebView获取网页中JavaScript弹框内容 网页中弹窗的js代码为 <script type="text/javascript" language= ...

  2. Android 使用JS注入获取网页视频链接

    Android 使用JS注入获取网页视频链接 思路: 1.通过js注入获取整个网页html. 2.通过jsoup分析获取video播放器的数据源. 一.开启webviewjs功能,注入js回调 mWe ...

  3. php网站怎么打包成apk,Android编程实现webview将网页打包成apk的方法

    本文实例讲述了Android编程实现webview将网页打包成apk的方法.分享给大家供大家参考,具体如下: 功能非常简单,而且乍一看没什么特别大的用处,因为实际上就是浏览器而已...但如果说网页一开 ...

  4. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  5. android u盘挂载监听,Android SD卡及U盘插拔状态监听及内容读取

    本篇是通过系统方法来对sd卡及U盘插拔监听及数据获取,Android盒子端开发,有系统权限,当然,这个比较简单,知道具体方法,可以通过反射来实现. 先贴上效果图: 获取外置存储设备并监听插拔状态 获取 ...

  6. Android SD卡及U盘插拔状态监听和内容读取

    本篇是通过系统方法来对sd卡及U盘插拔监听及数据获取,Android盒子端开发,有系统权限,当然,这个比较简单,知道具体方法,可以通过反射来实现. 先贴上效果图: 获取外置存储设备并监听插拔状态 获取 ...

  7. JavaScript 技术篇-通过代码获取dom元素绑定的监听事件,chrome浏览器查看js元素绑定的监听事件

    > var a = document.querySelector("#su"); < undefined > getEventListeners(a); < ...

  8. 微信小程序批量获取input的输入值,监听输入框,数据同步

    微信小程序批量获取input的输入值,监听输入框,数据同步 在使用小程序时,跟vue的数据绑定不一样,没有v-model这个属性了,官网也只是给了一些事件监听. 但是我们如果有多个表单时,需要写多个事 ...

  9. android全局监听onkeydown,Android中的几个onTouch()事件、onKeyDown监听返回键无效

    Android中的几个onTouch()事件.onKeyDown监听返回键无效 一:Android中的几个onTouch()事件 继承SimpleOnGestureListener,HahaGestu ...

  10. webview获取网页标题并展示、自定义(重写)网页的alert弹框

    webView.setWebChromeClient(new WebChromeClient() { //获取网页的标题 @Override public void onReceivedTitle(W ...

最新文章

  1. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
  2. C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)
  3. 如何保护企业网络免受DDoS攻击?—Vecloud微云
  4. 计算机用户的特点,计算机应用基础 Windows的主要特点
  5. 减去字符串_从文本字符串中提取指定值的6个超级技巧解读
  6. 虚拟机变更网卡MAC地址后的网络连接
  7. C#图片处理之:亮度和对比度的校正
  8. sina微博登录框和twitter的比较
  9. read -p 命令--shell 脚本
  10. 让刺猬和狐狸结婚:资本巨鳄BlackRock的金融科技野心
  11. echar生成折线图
  12. IOS 使用itms-services协议,服务端安装应用
  13. Photoshop制作水晶立体字
  14. 【转】最浅显的LDAP介绍
  15. 除了Sublime Text ,还有啥笔记应用能double代码效率?
  16. QT -关于QLineEdit的函数text获取的值是空的
  17. java水费管理系统课程设计_java水电费管理系统
  18. SpringMVC + MyBatis + MySQL + Redis(作为二级缓存) 配置
  19. 金融爬虫python网贷,互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
  20. 陌陌、BIGO、比亚迪、好未来、同程艺龙、去哪儿、联通西安研究院、华为、海康威视java开发面试经验

热门文章

  1. python调用m文件
  2. Office之word如何删除页眉横线
  3. 在线上课中设备突然关机如何关闭直播
  4. 凸优化 - 3 - Jensen不等式、共轭函数、Fenchel不等式
  5. 有关单片机驱动IR2104遇到的问题及解决方法
  6. Laravel文档阅读笔记-Rendering JSON(对JS变量进行赋值)
  7. 苹果屏蔽更新描述文件_iOS屏蔽更新描述文件以及超级详细安装方法分享
  8. html ul动态添加li,javaScript动态添加Li元素
  9. Vue + ElementUI 实现一个动态添加元素的小例子
  10. 微信小程序-微信支付