在Android众多弹窗中,论坑的数量,PopupWindow毫无疑问遥遥领先。
PopupWindow很多时候真的是让人又爱又恨,爱的是它的定制自由,恨的是它的表现不同。
本人从实习时接触到PopupWindow,就已经感到PopupWindow的强大之处,但因为坑实在太多,因此一直都是 “想用,但不敢用”,然而一直避免也无法解决问题,因此BasePopup的创作初衷由此开始。

里程碑

  • 2016年,写出第一版BasePopup,彼时的BasePopup仅仅只有三个文件,以填坑为主。
  • 2017年,BasePopup迭代到1.7.2版本,某种意义上来说1.7.2是第一次重构之前的稳定版本,该版本依然是以填坑为主,尽可能的兼容因系统修改导致的种种问题。
  • 2018年上半年,第一次重构,迭代至1.9.4版本,该版本是2.0时代之前的最后一个版本,也是最多人使用的版本。该版本添加了背景模糊(首次添加在1.9.1版本中)的特性,也是从这个版本开始奠定了BasePopup的整体框架,并走向第二次重构。
  • 2018年下半年,第二次重构,BasePopup迎来v2时代,经历了四个多月的重构,解决了1.9.4的布局强制两层的限制,同时建议用户尽早迁移到2.0版本,为了防止迁移困难提供了迁移文档,发布2.0.8正式版。
  • 2018年底,对2.0.8再次重构,发布2.1.0版本,同时也是v2版本初期最多人使用的版本。该版本添加了许多新的特性,总结起来就是使用更加简单,也更加自由。同时也发布了详细的README和GitHub的wiki文档。
  • 2019年,发布2.2.0版本,历时5个月。如果说前面的版本是量的改变,2.2.0的发布则是质的飞跃,从2.1.0到2.2.0之中经历了数十个Candy预览版,在这个版本中大胆的hook掉系统的WindowManager,测量和布局交由BasePopup统筹,进而实现了以前很难实现的功能,同时也算是完全避免了系统版本的差异性,真正开始实现BasePopup的初衷。
  • 2019年9月,第三次重构,本次重构旨在缩减BasePopup的代码量,呈现更简洁,更好读的代码,同时编写本文档,减少Github首页的文字量。同时随着系统黑灰名单的限制,抛弃了黑科技绕过API限制反射的问题,采取ContextWrapper的方式,达到不使用反射的方式来Hook的目的,该方案idea来自xchengDroid,非常感谢他与我交流。
  • 2020年2月,第三次重构完成,因为感觉上面写的东西太多,序言也没啥人看,所以就懒得写重构了。。。详情去看历史更新吧。

未来的路还很长,随着技术的提升,复盘,重构也会一直都会进行。
当BasePopup走到10.x的时候,又会是怎样的一番景象呢?
我们,拭目以待
我们,一路前行

使用须知(帮助您快速判断是否需要BasePopup)

本库作为基类,需要做的是尽可能的抽象,尽可能的开放。

因此我们并不能实现诸如“一句话完成xxx”的需求,当然,这类型(懒的)需求我们也会慢慢的满足,但这将会作为扩展库以另外依赖的形式加入(详见“其他计划”),至于时间。。。纯粹是看我心情,毕竟需求是无限的,时间精力是有限的。(毕竟我真的很懒)

也正因为如此,所有的具体的功能,都需要您亲自去完成,去打造属于你的BasePopup,而不要纠结于“为什么这个库没有最简单的提示窗功能”,如果您觉得很麻烦,做个简单的弹窗都需要我去写xml什么的,那可能我们这个库并不适合您,建议您去找找提供这种功能的库,不要浪费时间继续了解BasePopup了。

致谢

开源之路也离不开大家的帮助,在这里衷心感谢那些曾经帮助过我的朋友,也感谢一些项目带给我的灵感。

cover.jpg

Github:https://github.com/razerdp/BasePopup 邮箱:razerdp123@gmail.com
微信交流群:因QQ没时间管理,因此解散,同时开通微信群,主要用于交流和BasePopup的反馈,为了保证微信群的质量,因此只有打赏了之后才能进群~
因近期发现无法回复付款方,因此如果您已经微信支付打赏并需要进群,请重新再扫一遍支付宝并支付,我会退款给您并联系您~

微信截图_20190903142721.png