/BasePopup

一款针对系统PopupWindow优化的Popup库,功能强大,支持模糊,定位简单,你会爱上他的~

Primary LanguageJavaApache License 2.0Apache-2.0

中文 | English

Logo图片似乎加载不出来

BasePopup - Android下打造通用便捷的PopupWindow

Release Candy License Api Author


扩展组件 Support(已终止迭代) Lifecycle(已终止迭代) androidx
Release
Candy

导航



特性

  • 更简单更精准的控制显示位置,通过Gravityoffset来控制您的PopupWindow
  • 本库为抽象类,对子类几乎没有约束,您完全可以像定制Activity一样来定制您的PopupWindow
  • 支持AnimationAnimator,随意控制您的PopupWindow的动画,再也不用去写蛋疼的xml了
  • 顺滑的背景定制,支持背景模糊局部模糊展开变暗或者修改颜色甚至是贴图,这一切仅仅需要您通过一句Api完成
  • 不再担心PopupWindow蛋疼的事件拦截,返回键控制点击外部Dismiss控制外部事件响应控制三者分离
  • PopupWindow自动锚定AnchorView,滑动到屏幕外自动跟随AnchorView消失,不需要复杂的逻辑设置,只需要通过Link方法告诉BasePopup
  • 简单的PopupWindow不想新建一个类,希望拥有链式调用?没问题,QuickPopupBuilder为此而生,相信你会越用越爱~

注意事项

  • 请务必仔细阅读本README,每个版本升级请务必查阅更新日志,这可以为您减少不必要弯路
  • 2.2.2版本开始不再支持Support,建议您尽快升级到AndroidX
  • 请注意引用版本的问题,Release版本是稳定版,Candy是预览版。
    • Release版本:一般在Candy版本反复验证修复后发布到Release,如果您对稳定性要求较高,请使用Release版本。
    • Candy版本:一般新功能、issue修复都会发布到Candy版本,Candy版本发布比较频繁,但通常会拥有新的功能,如果您喜欢试验新功能同时对稳定性要求不高,请使用Candy版本。
    • Release和Candy两个版本互相切换可能会导致Build失败,这时候您Clean一下Project即可
  • 从16年第一次提交到现在,本人技术也一直在进步,BasePopup也会一直迭代更新,所以,请谨慎选择版本哦~一不小心就颠覆了之前的实现。

环境依赖

请把下述 {$latestVersion} 替换为上面表格中对应的版本。

自2.2.2版本开始,BasePopup将不再支持support,同时BasePopup建议您尽早迁移到AndroidX

  • Release:

    • 基础库(必选):implementation 'com.github.razerdp:BasePopup:{$latestVersion}'
    • androidx支持库(可选):implementation 'com.github.razerdp:BasePopup-compat-androidx:{$latestVersion}'
  • Candy

    • 基础库(必选):implementation 'com.github.razerdp:BasePopup_Candy:{$latestVersion}'
    • androidx支持库(可选):implementation 'com.github.razerdp:BasePopup_Candy-compat-androidx:{$latestVersion}'

快速入门

请参考文档:BasePopup手册


混淆

理论上库自带继承的混淆,如果发现组件不可用,可以自行添加以下混淆:

-keep class * implements razerdp.basepopup.BasePopupComponent

Api(请看Wiki,后续迁移至文档)

Link👉WIKI


更新日志 (历史更新)

  • 近期正在重构BasePopup,旨在代码更容易读,因此近期更新可能较慢,新版本将会对issue统一处理

  • 【里程碑】2.2.2

    • 2020/02/14
      • 情人节快乐~
      • 更新了文档
      • 初步通过Candy版本,等待issue反馈后发布release
    • 【Candy】2.2.2.200203 2020/02/03
      • 重构onCreate中弹出的方案
      • 解决一些检查到的内存泄漏
      • 去除limitScreen()方法
      • 重构DecorViewProxy,现在不再需要我来适配宽高了,由系统完成,以此解决各种蛋疼的适配问题
      • 优化Measure方法,当BasePopup显示跟Anchor关联时,如果宽或者高为match_parent,将会填满剩余可用空间
      • 解决Android 10黑/灰名单的问题
      • 即将发布正式版
    • 【Candy】2.2.2.200212 2020/02/12
      • 再次检查内存泄漏问题
      • 修复outSideTouchable下键盘适配问题
      • 修复正常情况下无法弹窗的问题
      • 预发布release
      • 去除onAnchorTop/onAnchorBottom方法,后续将会替换为别的方法,暂时屏蔽该类方法
      • 未验证重构:
        • autoLocated问题
        • update问题
      • bug fixed:#236/#242
  • 【Candy】2.2.2

    • 【Candy】190704
      • 修复AnimatorSet的时间问题 fix #203
    • 【Candy】190722
      • 回滚#188修复
      • 经检查,#188修复带来的问题比较严重,建议升级到该版本
    • 【Candy】190816
      • 考虑到很多用户提出全面屏会有蒙层无法填充的问题,因此增加setMaskLayoutWidthsetMaskLayoutHeight方法,该方法允许您自定义蒙层的高度
      • 开始重构BasePopupWindow,本次重构将会解决遗留问题同时缩减冗余代码,并提高代码可读性
    • 【Candy】190904
      • 重构屏幕宽高获取逻辑
      • 修改supporter名字为component
    • 【Candy】190912
      • 重构键盘逻辑,现在键盘对齐支持选择模式了~
      • 相关文档请查阅文档 键盘(输入法)
    • 2019/09/20
      • Demo大翻新
    • 2019/09/22
      • 增加输入法Demo
      • Demo支持更新
      • Demo增加issue修复测试用例
    • 2019/09/26
      • 取消对support的支持
    • 2019/09/27
      • 增加手势导航栏支持
    • 2019/09/29
      • 发布新版candy
    • 2019/10/09
      • 添加issue #230测试用例
    • 2019/10/31
      • 优化autoLocate
      • 优化超出屏幕的位移问题
      • 添加setResize()方法
      • 添加onAutoLocationChange()方法
  • 【Release】2.2.1(2019/06/24)

    • 支持Service或者非ActivityContext里弹窗
    • 优化PopupUiUtils,优化获取屏幕宽高算法
    • 修改并优化键盘判断逻辑
    • 优化全屏状态下点击范围的判定,fixed #200

例子预览


更多例子请下载Demo:apk体验下载



打赏(看在我那么努力维护的份上。。。给个零食呗~)

Logo图片似乎加载不出来


交流群

因QQ没时间管理,因此解散,同时开通微信群,主要用于交流和BasePopup的反馈,为了保证微信群的质量,因此只有打赏了之后才能进群~


常见问题

请查阅手册:常见问题


License

Apache-2.0