简介: 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放并且可以全频、支持加载 word,xls,ppt,pdf,txt 等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生 App、x5 库为最新版本,功能强大。
标签:
目录介绍
1.1 案例展示效果
1.2 该库功能和优势
1.3 相关类介绍说明
2.1 如何引入
implementation 'cn.yc:WebViewLib:1.1.6'
2.2 最简单使用
X5WebUtils.init(this);
<BridgeWebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp" />
<X5WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp" />
<可以使用 ProgressWebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp" />
如何使用自己的 WebViewClient 和 WebChromeClient
//主要是在 X5WebViewClient 和 X5WebChromeClient 已经做了很多常见的逻辑处理,如果不满足你使用,可以如下这样写
MyX5WebViewClient webViewClient = new MyX5WebViewClient(webView, this);
webView.setWebViewClient(webViewClient);
MyX5WebChromeClient webChromeClient = new MyX5WebChromeClient(this);
webView.setWebChromeClient(webChromeClient);
private class MyX5WebViewClient extends X5WebViewClient {
public MyX5WebViewClient(BridgeWebView webView, Context context) {
super(webView, context);
}
//重写你需要的方法即可
}
private class MyX5WebChromeClient extends X5WebChromeClient{
public MyX5WebChromeClient(Activity activity) {
super(activity);
}
//重写你需要的方法即可
}
2.3 常用 api
关于 web 的接口回调,包括常见状态页面切换,进度条变化等监听处理
mWebView.getX5WebChromeClient().setWebListener(interWebListener);
private InterWebListener interWebListener = new InterWebListener() {
@Override
public void hindProgressBar() {
pb.setVisibility(View.GONE);
}
@Override
public void showErrorView(@X5WebUtils.ErrorType int type) {
//设置自定义异常错误页面
}
@Override
public void startProgress(int newProgress) {
//该方法是是监听进度条进度变化的逻辑
pb.setProgress(newProgress);
}
};
关于视频播放的时候,web 的接口回调,主要是视频相关回调,比如全频,取消全频,隐藏和现实 webView
x5WebChromeClient = x5WebView.getX5WebChromeClient();
x5WebChromeClient.setVideoWebListener(new VideoWebListener() {
@Override
public void showVideoFullView() {
//视频全频播放时监听
}
@Override
public void hindVideoFullView() {
//隐藏全频播放,也就是正常播放视频
}
@Override
public void showWebView() {
//显示 webView
}
@Override
public void hindWebView() {
//隐藏 webView
}
});
//X5WebView 中
//设置是否开启密码保存功能,不建议开启,默认已经做了处理,存在盗取密码的危险
mWebView.setSavePassword(false);
//是否开启软硬件加速
mWebView.setOpenLayerType(false);
//获取 x5WebChromeClient 对象
x5WebChromeClient = mWebView.getX5WebChromeClient();
//获取 x5WebViewClient 对象
x5WebViewClient = mWebView.getX5WebViewClient();
private WebProgress pb;
//显示进度条
pb.show();
//设置进度条过度颜色
pb.setColor(Color.BLUE,Color.RED);
//设置单色进度条
pb.setColor(Color.BLUE);
//为单独处理 WebView 进度条
pb.setWebProgress(newProgress);
//进度完成后消失
pb.hide();
//同步 cookie
X5WebUtils.syncCookie(this,"url",cookieList);
//清除 cookie
X5WebUtils.removeCookie(this);
2.4 使用建议
优化一下相关的操作
关于设置 js 支持的属性
@Override
public void onResume() {
super.onResume();
if (mWebView != null) {
mWebView.getSettings().setJavaScriptEnabled(true);
}
}
@Override
protected void onStop() {
super.onStop();
if (mWebView != null) {
mWebView.getSettings().setJavaScriptEnabled(false);
}
}
@Override
protected void onDestroy() {
try {
if (webView != null) {
webView.stopLoading();
webView.destroy();
webView = null;
}
} catch (Exception e) {
Log.e("X5WebViewActivity", e.getMessage());
}
super.onDestroy();
}
2.5 关于 web 页面异常状态区分类型
@Override
public void showErrorView(@X5WebUtils.ErrorType int type) {
switch (type){
//没有网络
case X5WebUtils.ErrorMode.NO_NET:
break;
//404,网页无法打开
case X5WebUtils.ErrorMode.STATE_404:
break;
//onReceivedError,请求网络出现 error
case X5WebUtils.ErrorMode.RECEIVED_ERROR:
break;
//在加载资源时通知主机应用程序发生 SSL 错误
case X5WebUtils.ErrorMode.SSL_ERROR:
break;
default:
break;
}
}
2.6 该库流程图
3.1 Java 调用 js 的使用方法
代码如下所示,下面 updateAttentionStatus 代表 js 这边的方法名称
webView.callHandler(“updateAttentionStatus”, …, new CallBackFunction());这是 Java 层主动调用 Js 的”updateAttentionStatus”方法。
mWebView.callHandler("updateAttentionStatus", attention, new CallBackFunction() {
@Override
public void onCallBack(String data) {
}
});
3.2 js 调用 java 的使用方法
mWebView.registerHandler("toPhone", new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
try {
JSONObject jsonData = new JSONObject(data);
String phone = jsonData.optString("phone");
//todo 打电话
} catch (JSONException e) {
e.printStackTrace();
}
}
});
//注意,这里回传数据目前只是支持 String 字符串类型
function.onCallBack("回调数据");
3.3 js 的调用时机分析
关于其他内容介绍
关于博客汇总链接
其他推荐
关于 LICENSE
Copyright 2017 yangchong211(github.com/yangchong211)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
文章浏览阅读1.5k次。基于scheduler framework修改kubernetes源码扩展调度pluginkubernetes源码版本:1.18.31.在/pkg/scheduler/framework/plugins目录下建立自己的插件文件夹,参考源码自带插件编写chajian.go以及BUILD文件,实现扩展点对应的接口2.修改/pkg/scheduler/framework/plugins/registry.go在NewInTreeRegistry增加插件注册3.修改/pkg/sc..._scheduler-plugins实现自己的调度
文章浏览阅读1.8k次。大部分人在进行K/3cloud二次开发插件的调试时,选择的是附加IIS进程w3wp调试,本文给大家介绍一下基于WebDev附加进程调试,不用重启iis。步骤如下:1)拷贝K/3cloud产品安装目录中的website整个目录到另外一个开发目录中,例如:D:\K3Cloud4DEV\Website2)如果你的操作系统是32位的,那么第2个步骤可以省略,如果你的系统是64位的,那么请找个3_c#调试 附加到进程 k3cloud
文章浏览阅读967次。TCMalloc 是Google 开发的内存分配器,在不少项目中都有使用,例如在Golang中就是用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够scale。并且它的内存分配速度是glibc2.3中实现的malloc的数倍。TCMalloc的著名 是由于它的性能是在是太高了如何分配定长的记录首先是基本问题,如何分配定长的记录?例如,我们有一个Pag..._tcmalloc详解
文章浏览阅读2.8k次。Apache下使用Bandwidth Mod限制总带宽环境:CentOS release 5.6 + Apache 2.2.22mod_bw v0.92http://ivn.cl/files/source/mod_bw-0.92.tgzmod_bw v0.92 文档http://legacy.ivn.cl/files/txt/mod_bw-0.92.txt下载及安装_bandwidth module disabled
文章浏览阅读525次。ArrayList 集合类数组的特点:1.类型统一2.数组长度固定ArrayList可以添加、移除、遍历 特点可变长度、可以是任何类型数据用法和数组一样属性:count(得到集合中的实际存放数据的个数)ArrayList集合中常用的几种方法:Add()方法:向数组中添加一个元素。Colone()方法:复制一个数组。下面举个实例:_arrlist特征
文章浏览阅读3w次,点赞6次,收藏31次。Nmap(NetworkMapper)是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型。nmap支持很多扫描技术,例如:UDP、TCPconnect()、TCPSYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。_liunx 防止nmap扫描
文章浏览阅读4.5k次,点赞3次,收藏7次。//使用for循环输出一个5行2列的HTML表格,同时将奇数行的背景色设置为绿色。(PHP).<!DOCTYPE html><html><head> <title>Feiyang Li's table!</title> <style> table{border: 1px solid black; width: 1..._使用php输出一个5行2列的html表格同时将奇数行的背景色设置为绿色
文章浏览阅读401次。本文为Edgex系列第三篇文章,本篇将对接EdgeX内部自带的虚拟设备。一、虚拟设备介绍虚拟设备服务(Virtual Device Service GO)可以模拟不同类型的设备来为核心数据微服务生成事件和读数。另外,用户可以通过命令服务向设备发送命令。虚拟设备服务允许您在没有任何真实设备的情况下执行功能或性能测试。此版本的虚拟设备服务基于Device SDK GO实现,使用ql(嵌入式 SQL 数据库引擎)来模拟虚拟资源。架构图如下:时序图如下:二、启动虚拟设备服务在上一讲._edgex 虚拟设备服务
文章浏览阅读2.9w次,点赞6次,收藏9次。今天除了浏览器自带的翻译之外,我还给大家整理了5个免费的插件翻译工具,同样可以直接翻译外文网站,有些还支持翻译指定页面短语。_网页翻译插件
文章浏览阅读1.1w次,点赞5次,收藏5次。win10电脑报重启错误的解决方法解决方法一: 1、同时按下电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运行窗口中,输入regedit并单击回车,这样就可以打开注册表编辑器窗口了 2、在打开的注册表编辑器窗口中,点击展开左侧菜单中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Mic_sql重新启动计算机失败win10
文章浏览阅读647次。5.Repeater(中继器/重放)功能模块 Repeater是用于手动操作和发送个别HTTP请求,并分析应用程序的响应一个简单的工具。可以发送一个内部请求从Burp任何地方到Repeater,修改请求并且发送。afei 可以从Proxy history、site map、Scanner等模块中右键菜单send to repeater发送到repeate..._burpsuite 菜单权限
文章浏览阅读2.5k次。ubuntu 开机启动Firefox演示教程1. 系统环境操作系统:Linux ubuntu 5.4.0-52-generic #57~18.04.1-UbuntuFirefox:Mozilla Firefox 82.02. 准备工作在 /sbin或者/usr/bin添加 firefox的启动命令,保证在shell状态下能直接启动firefox;如果需要启动自定义的程序,需要创建一个shell脚本,让脚本启动自定义程序,然后将脚本放在 /sbin下。3. 编写.desktop文件在 ~/.co_ubuntu 带有firefox 的界面