AgentWeb 介绍

AgentWeb 是一个高度封装的 Android WebView ,简单易用 , 带有进度条 、 支持文件上传 、 下载 、 简化 Javascript 通信 ,加强 Web 安全的库 。 App 下载体验

前言

WebView 可谓是每个应用必备的一个控件了 ,但是谈起它的使用 ,让很多人都不是那么喜欢它 ,比如说每个 Web 页面都需要各种一大推的 setting ,好一点的可能封装成一个 BaseWebActivity 和 BaseWebFragment ,但是重复的代码总是让有洁癖的程序员不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥补了这些空缺 。

AgentWeb 功能

  1. 支持进度条以及自定义进度条
  2. 支持文件下载
  3. 支持文件断点续传
  4. 支持下载通知形式提示进度
  5. 简化 Javascript 通信
  6. 支持返回事件处理
  7. 支持注入 Cookies
  8. WebView 安全

为什么要使用 AgentWeb ?

七个字 ,简洁易用体验好 。 最重要的是 WebView 很多东西不支持呀 , 坑太多!

Web 文件下载 文件上传 Js通信 断点续传 使用简易度 进度条 线程安全
WebView 不支持 不支持 支持 不支持 麻烦 没有 不安全
AgentWeb 支持 支持 更简洁 支持 简洁 安全

简洁易用

为什么说它简洁易用吗 ? 下面京东商城效果图 , 只需一句话 !

mAgentWeb = AgentWeb.with(this)//传入Activity.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams.useDefaultIndicator()// 使用默认进度条.defaultProgressBarColor() // 使用默认进度条颜色.setReceivedTitleCallback(mCallback) //设置 Web 页面的 title 回调.createAgentWeb()//.ready().go("http://www.jd.com");

你没看错 ,里面没有一句 Setting , 甚至连 WebChromeClient 都不配置就有进度条 。

Javascript 通信拼接太麻烦 ? 请看 。

//Javascript 方法
function callByAndroid(){console.log("callByAndroid")}

Android 端

mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");

结果

05-27 08:27:04.945 469-469/com.just.library.agentweb:web I/Info: consoleMessage:callByAndroid  lineNumber:27

京东商城效果图

京东效果图

到了这里 , 弱弱问一句 , 你还有什么理由不使用 AgentWeb ?

浅谈进度条

为什么要谈一下进度条这个东西呢 ? 因为没有进度条的 WebView 页面体验实在太差了 ,AgentWeb 默认的进度条是一般浏览器的进度条 ,为什么采用这种进度条呢 ? 因为体验好 ,微信和QQ ,支付宝 、 UC 以及 Safari 都采用这种进度条是有他们道理的 , 我还见过应用加载 Web 页面的时候直接弹 Dialog 不可取消 ,这种恶心的做法 ,没有非常必要让用户确定情况都别弹 Dialog ,特别在用户网络不好的情况下 ,加载速度变得突奇的慢 ,那么 Dialog 就一直存在 ,用户耐性不好 ,只能把你进程杀死 。

Agentweb 视图结构

    <FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"></WebView><!--进度条--><com.just.library.BaseIndicatorViewandroid:layout_width="match_parent"android:layout_height="2dp"></com.just.library.BaseIndicatorView></FrameLayout>

很清晰 AgentWeb 最外层是 FrameLayout , 所以在使用 AgentWeb 的时候还需要给 FrameLayout 指定父控件(下面有使用方式) 。

引入

  • Gradle

    compile 'com.just.agentweb:agentweb:1.0.3'
    
  • Maven

    <dependency><groupId>com.just.agentweb</groupId><artifactId>agentweb</artifactId><version>1.0.3</version><type>pom</type>
    </dependency>

用法

Activity 使用如下

mAgentWeb = AgentWeb.with(this)//传入Activity.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams.useDefaultIndicator()// 使用默认进度条.defaultProgressBarColor() // 使用默认进度条颜色.setReceivedTitleCallback(mCallback) //设置 Web 页面的 title 回调.createAgentWeb()//.ready().go("http://www.jd.com");

Fragment 使用如下

@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);mAgentWeb = AgentWeb.with(this.getActivity(), this)//这里需要把 Activity 、 和 Fragment  同时传入.setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 设置 AgentWeb 的父控件 , 这里的view 是 LinearLayout , 那么需要传入 LinearLayout.LayoutParams.useDefaultIndicator()// 使用默认进度条.setReceivedTitleCallback(mCallback) //标题回调.setSecurityType(AgentWeb.SecurityType.strict) //注意这里开启 strict 模式 , 设备低于 4.2 情况下回把注入的 Js 全部清空掉 , 这里推荐使用 onJsPrompt 通信.createAgentWeb()//.ready()//.go(getUrl());}

混淆


-keep public class * extends android.webkit.WebChromeClient

总结

AgentWeb 是一个把 WebView 完全代理出来 , 脱离 Activity 、 Fragment xml 布局 , Android Web 库 。

地址 : AgentWeb 欢迎star

作者:Justson
链接:https://www.jianshu.com/p/c80da1c41af7
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

AgentWeb 更加简洁优秀的webview相关推荐

  1. Android中 简洁优秀的AgentWeb框架基本使用

    AgentWeb 安卓x包4.1版本 1).JAVA调用JS(数据都是虚拟生成的哦) 1.搭建实体类 2.准备数据源 3.定义JS函数 4.JAVA调用JS 5.Echarts数据解析处理 6.效果展 ...

  2. Android常用热门开源库汇总(持续更新)

    原文转载:https://www.yundashi168.com/344.html 请及时关注原文网站,因为后续持续更新都在原网站更新.请多多点赞和关注. 前言 收集了一些比较常见的开源库,特此记录( ...

  3. 2019年最新Android常用开源库汇总上篇(持续更新)

    因为本文资料太多,所以本文分上下篇,并且持续更新,觉得不错的小伙伴们可以关注点赞收藏一下 1.基本控件 1.1.TextView ScrollNumber ReadMoreTextView HtmlI ...

  4. 开发必备!2019年最新android常用开源库汇总上篇(持续更新)

    因为本文资料太多,所以本文分上下篇,并且持续更新,觉得不错的小伙伴们可以关注点赞收藏一下哦~ 1.基本控件 1.1.TextView ScrollNumber ReadMoreTextView Htm ...

  5. php版 v2.0,KangPHP v2.0 正式版

    KangPHP是一款非常简洁优秀的PHP框架, KangPHP是中小型项目首选框架.框架构架合理,一目了然.强大的外部类库支 持,强大的缓存系统,内置kangphp模板引擎,单入口MVC模式,面向对象 ...

  6. 【转】2015-新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序

    在博客园学习很长时间了,今天终于自己也开通了博客,准备分享一些感悟和经验.首先感谢博客园园主提供了这么好的程序员学习交流平台,也非常感谢张善友.dax.net.netfocus.司徒正美 等技术大牛的 ...

  7. 送几个非常nice的软件

    ##1. Rolan 一款非常简洁优秀的快速启动软件,可以放常用软件和文件夹链接,支持全局快捷键ALT + 空格 2.MacTypeTray 让你拥有mac的字体渲染,我们经常面对屏幕,一个看着惹眼的 ...

  8. tnl 网络游戏架构底层深入分析

    本文讨论以下实现: NetConnection <--> NetObject   NetConnection <--> NetEvent   remote create 昨天分 ...

  9. Python开启定时任务的两种方法

    前言 前段时间刚刚一个项目中有一个需求就是定时去触发一个任务,但是年代久远,并没有记住当时学习的用法,在完成任务的时候,走了不少的弯路,现在把在网上爬楼学到的分享给大家. 1,Django中开启定时任 ...

  10. Android中测试多国语言漏翻的情况(一)

    背景:由于现在手机销售到各个国家,所以面对国际化需要进行语种的翻译,但是手机支持的40多种语言,如果全靠人力进行检测显然是支出和收入不对等的~ 目前现状:手机中的语言翻译文字实际是在String.xm ...

最新文章

  1. 如何从当前Git工作树中删除本地(未跟踪)文件
  2. tomcat的访问日志
  3. linux 如何查看应用程序进程号、端口
  4. 碰撞的小球 ccf (模拟)
  5. lnp和mysql分开安装_毕业设计之LNP+DISCUZ +分离的数据库操作
  6. VBA操作word生成sql语句
  7. leetcode 2 --- 两数相加
  8. MongoDB数据库操作
  9. 小米Android系统限制联网,Android 7 以上版本,绕过CA限制,抓取https
  10. 廖雪峰python教程-福利 | 廖雪峰官方Python教程,拿走不谢!
  11. Must read C++ book list
  12. python文件操作--写入文件
  13. Manchester Reunited 网站设计报告 // 当初的课程论文,纯怀念了=v=
  14. 怎样把m4a转换mp3格式?
  15. JavaScript严格检查模式strict的使用
  16. 基于J2ME的游戏开发总结和感想
  17. win10网络不出现计算机列表,win10系统电脑不显示无线网络的解决方法
  18. 5-6 人生的不同阶段
  19. 太空旅行时代到了!马斯克载人飞船发射成功!
  20. 3dmax入门 | 学3d建模必备软件技能基础教学

热门文章

  1. WeChat-JSAPI支付
  2. 【Ydui.js】------ ydui.js 中的 util 中的方法讲解如何调用使用 例如:获取地址栏信息,js 倒计时,cookie, 获取图片地址等
  3. 高等数学——二重积分的计算方法
  4. python仓库管理
  5. 5--残差网络(ResNet)
  6. xp系统可用的远程投屏软件_市面上支持WindowsXP系统的无线投屏器是越来越少了?...
  7. 最新省市区json字符串
  8. 共享没有计算机网络连接不上去,苹果usb共享给电脑连接不上怎么办
  9. 计算机网络知识总结(韩立刚老师视频)
  10. Zabbix5系列-监控惠普服务器iLO管理口 (六)