BasePopup Versions Save

Android下打造通用便捷的PopupWindow弹窗库

3.1.0

2 years ago
  • 【Release】3.1.0 (2021/05/28)
    • 本次更新是破坏性更新,更新之前如果您仍处于2.x版本,请务必阅读以下两项事项:
      • 由于JCenter已经停止服务,因此3.0版本开始将会迁移到MavenCentral,新的依赖groupId为【io.github.razerdp】,具体请查看上面的环境依赖
      • 3.0版本是破坏性升级,影响范围为所有BasePopupWindow子类,但修改不会很多,具体请看关于BasePopup 3.0的破坏性更新说明
    • 【优化】
      • 增加api:hideKeyboardOnShow(boolean),是否在BasePopup显示时收起键盘,默认收起
        • demo增加 issue 369测试用例
        • fixed #369
      • 蒙层现在只有点击的时候才会执行dismiss(之前是只判断action_up是否在蒙层内)
        • onOutSideTouch增加isMaskPressed标记
    • 【Api修改】
      • 删除BaseLazyPopupWindow:往后不需要区分懒加载和正常的BasePopupWindow,统一依赖BasePopupWindow
      • 删除方法onCreateConstructor:该方法实际上是给BaseLazyPopupWindow使用的,现在没有了BaseLazyPopupWindow,自然不需要该方法
      • 删除方法onCreateContentView:该方法的删除将会影响所有的BasePopupWindow子类,您需要手动去改动
        • 该方法将会被setContentView(@LayoutRes int layoutResID)setContentView(final View view)所代替,您需要修改其使用。
        • 如果使用setContentView(final View view),我们依然建议您用setContentView(createPopupById(layoutResID)),以便我们解析到正确的xml配置。
    • 【修复】
      • 修复屏幕旋转后Popup大小没更新的问题
      • 修复update(float,float)失效的问题

2.2.10

3 years ago
  • 【Release】2.2.10(2020/11/06)
    • 【优化】
      • 优化状态栏、导航栏的覆盖:
        • 增加方法:setOverlayStatusbarMode,设置BasePopupFlag.OVERLAY_CONTENT或者BasePopupFlag.OVERLAY_MASK其一或相加的时候,将允许蒙层或内容层覆盖状态栏
        • 增加方法:setOverlayNavigationBarMode,设置BasePopupFlag.OVERLAY_CONTENT或者BasePopupFlag.OVERLAY_MASK其一或相加的时候,将允许蒙层或内容层覆盖导航栏
        • 文档请查看:【SystemBar覆盖控制】
      • 增加方法:setMaskOffsetX,设置蒙层水平方向上的偏移
      • 增加方法:setMaskOffsetY,设置蒙层垂直方向上的偏移
      • QuickPopupConfig:
        • 增加上述方法,为配合Builder语法,上述方法稍作更名:
          • setOverlayStatusbarMode -> overlayStatusbarMode
          • setOverlayNavigationBarMode -> overlayNavigationBarMode
          • setMaskOffsetX -> maskOffsetX
          • setMaskOffsetY -> maskOffsetY
    • 【修复】
      • 修复BaseLazyPopupWindow中键盘不自动弹出的问题 #363

2.2.9

3 years ago
  • 【Release】2.2.9(2020/10/10)
    • 2.2.9主要更新内容:部分优化及回调增加
    • 【新增方法】
      • 增加方法:onBeforeDismiss,作用同OnDismissListener#onBeforeDismiss()
      • 增加方法:setTouchable,该方法用于设置是否允Popup是否响应事件,如果不响应,则事件会穿透Popup
      • 增加键盘对齐View的方法 setAdjustInputMode(View,flag) #358
      • 增加方法:preMeasure(),预测量contentView,该方法将会进行measure,但是不能保证能够准确测量(如recyclerview未设置adapter时)
      • 增加方法:getPreMeasureWidth(),获取预测量后的宽度
      • 增加方法:getPreMeasureHeight(),获取预测量后的高度
      • 增加方法:updateKeyboardAlign(),该方法允许您手动通知BasePopup根据键盘对齐模式对齐键盘
      • 增加回调:onWindowFocusChanged回调
      • BasePopupUnsafe增加方法:
        • getWindowManager:获取BasePopup的WindowManager代理
        • getBasePopupDecorViewProxy:获取BasePopup最终的DecorView代理
        • getDecorViewLayoutParams:获取BasePopup最终DecorView的LayoutParams
    • 【功能优化】
      • 方法更名:onPreShow-> onBeforeShow
      • 优化onBeforeDismiss()判断顺序 #352
      • 去除init时预测量的方法,该方法是历史遗留下来的,用于定位用,现在定位都已经代理到View里面了,因此该方法被弃用
        • 但不排除部分用户需要这个,因此保留并改为允许用户触发
      • 方法修改:
        • getWidth(),只能在PopupWindow显示后才能正确获取宽度
        • getHeight(),只能在PopupWindow显示后才能正确获取高度

2.2.8

3 years ago
  • 【Release】2.2.8(2020/09/18)
    • 在2.2.8中,我们针对Api30进行了适配(beta),同时添加了一些【不安全】的工具类,对于2.2.7来说只是锦上添花,但也没有巨大的优化或者bug修复
    • 优化
      • 支持BasePopup使用BasePopup内的AnchorView弹窗
      • 添加BasePopupUnsafe,这个工具类初步定义为【不安全】的工具类,请谨慎使用
        • dismissAllPopup(boolean animateDismiss):关闭所有已经显示的BasePopup
        • dump(BasePopupWindow p):记录最后调用dump()方法的调用堆栈
        • getDump(BasePopupWindow p):获取最后调用dump()方法的调用堆栈
      • 去掉BasePopup接口,其方法移动到BasePopupWindow类中
      • 适配Api30(初步适配,可能会有不稳定的情况或引发其他非致命的bug)#349

2.2.7

3 years ago
  • 【Release】2.2.7(2020/08/21)
    • 在2.2.7中,我们重构了Layout的逻辑,同时对现有issue进行了修复,并对Demo内所有的测试用例在横屏和竖屏中进行了测试,全部都已经通过测试,现发布2.2.7稳定版,建议您尽快更新到2.2.7
    • bug修复
      • Popup在非全屏Dialog的位置显示仍然有异常,经过排查发现是2.2.6版本从getLocationOnScreen改为getLocationInWindow的原因,在群里讨论过后,决定采取原方案,统一以Screen作为参考,解决Window位置不一样而带来的Popup显示位置不正确的问题
      • RTL布局中的offset在2.2.6版本中以View作为参考系,实际上应该以系统坐标系为参考,2.2.7已修改
      • 背景模糊在overlayStatusBar(false)下模糊的图像仍然包含了状态栏,导致模糊的图像是错误的,2.2.7已修复
      • ContentView在含有Margin的时候,Margin范围内点击是无法响应的,我们针对这个问题做了适配,现在已经正常了 #317
      • ContentView在含有Margin的时候,如果是给定width>0或者height>0,会发生裁剪问题,这是因为其父类DecorView也被设置为一样的大小,2.2.7将Margin一并考虑,对DecorView大小做出相应的适配
      • ContentView在给定width>0或者height>0,同时没有关联AnchorView时,会发生裁剪问题,裁剪大小刚好是NavigationBar的大小,2.2.7修复了这个问题

2.2.6

3 years ago
  • 【Release紧急修复】2.2.6(2020/08/15)
    • 在2.2.5中,我们发现一个可能导致定位失效的严重问题,对此我们紧急修复并发布了2.2.6版本,请尽快升级到2.2.6版本
    • 优化
      • RTL布局适配offset
    • bug修复
      • 修复PopupGravity = Gravity.Left时定位错误的问题
      • 修复非全屏Dialog定位出错的问题

2.2.5

3 years ago

*【Release】2.2.5(2020/08/13)

  • 我们针对2.2.4.1所出现的问题进行了修复,2.2.4.1在横屏的时候出现较多的bug,这些问题我们在2.2.5中集中修复并发布正式版,我们建议您更新到 2.2.5
  • 新增功能/方法:
    • PopupGravityMode分离:现在我们可以分别指定水平方向上和垂直方向上的GravityMode
    • 对应方法:setPopupGravityMode(GravityMode horizontalMode, GravityMode verticalMode)
    • 我们可以轻松的实现诸如“右边缘对齐AnchorView右边缘,同时在AnchorView顶部展示”等逻辑
  • 优化
    • 化BasePopup的内部log,支持中英文
    • 获取状态栏高度更替为System Resource,防止因为改了density导致获取不准确的问题
    • AnchorView获取位置方法修改,对齐参考系
  • bug修复
    • 修复隐藏NavigationBar下键盘无法弹出的问题
    • 修复showpopup出现异常时没有dismiss的问题
    • 重构layout逻辑,针对NavigationBar奇怪的方向适配#336
    • 修复键盘GlobalListener提前被remove,导致popup在第二次弹出才能适配键盘的问题#338
    • 修复刘海屏适配错乱的问题

2.2.4.1

3 years ago

在2.2.4中我们发现setMaxWidth/setMaxHeight出现错误,因此我们紧急发布2.2.4.1,请使用2.2.4的用户尽快升级到2.2.4.1

2.2.4

3 years ago
  • 【Release】2.2.4(2020/07/19)
    • 在2.2.4版本中,我们添加了非常棒的 AnimationHelper,在它的帮助下,创建BasePopup动画将会变得十分简单易懂,同时我们也增加了很多很棒的功能,欢迎更新到2.2.4版本~
    • 新增功能/方法:
      • 添加弹窗线程检查:非主线程下我们将会抛出异常 CalledFromWrongThreadException 异常
      • 开放 OnKeyboardChangeListener:现在您可以监听键盘显示、关闭事件,同时该回调会返回键盘的大小
      • 增加 KeyEventListener:现在允许您在外部添加事件监听,感谢issue:#296
      • 增加 setOverlayNavigationBar:通过该方法,您可以让您的BasePopup覆盖到导航栏,默认情况下不允许覆盖,如果您确实有需要,可以通过该api配置覆盖
      • 增加 setWidthAsAnchorView:您可以调用该Api决定BasePopup的宽度是否设置为AnchorView的宽度
      • 增加 setHeightAsAnchorView:您可以调用该Api决定BasePopup的高度是否设置为AnchorView的高度
      • 增加RTL布局支持:该需求早在几个月前就有群友在群里提出了,一直没去弄,直到最近才有空去写,得益于BasePopup根据Gravity来左方向判断,我们修改了极少的代码完成了RTL适配
        • 如果使用RTL,请务必设置 setLayoutDirection方向,告诉BasePopup宿主布局方向
        • RTL仅对showPopupWindow(View anchorView)showPopupWindow(int x,int y)有效
        • 请务必注意,BasePopup遵循官方做法,当您需要RTL布局的时候,请使用START代替LEFT,使用END代替RIGHT
      • 增加 syncMaskAnimationDuration:您可以设置蒙层动画的事件是否同步您的动画时间(取最长时间),默认同步
      • 增加AnimationHelper:我们希望能减少动画的代码量,同时让动画的创建更加的易懂,因此我们在本版本中正式推出AnimationHelper,相信你一定会喜欢他的
        • 关于AnimationHelper的资料,受篇幅限制,请查阅文档:【进阶指引-动画-AnimationHelper】
        • AnimationHelper在2.2.4版本新推出,可能会存在我没测出来的Bug,不过他只是创建动画的辅助类,因此不影响主体流程,所以如果您发现他不好用或者不满足您的功能,您可以更换为原生的动画创建,同时欢迎提交issue
    • 优化
      • 优化BasePopupHelper代码
      • 优化蒙层动画:
        • 我们针对蒙层的动画进行了优化,现在蒙层的渐入渐出时间将会跟您设置的动画最长时间同步,我们期望在您的展示/退出动画完成的一刹那,蒙层动画也同步完成,而不希望其提前或延后
        • 您可以通过 syncMaskAnimationDuration配置是否同步
    • 删除类/方法
      • 请注意,这次我们没有标记为@Deprecated,直接删除了代码,如果您使用到这些方法,请务必进行更改
      • 删除类: SimpleAnimationUtils.java,我们建议您使用 AnimationHelper 代替
      • 删除方法: BasePopupWindow#getTranslateVerticalAnimation
      • 删除方法: BasePopupWindow#getScaleAnimation
      • 删除方法: BasePopupWindow#getDefaultScaleAnimation
      • 删除方法: BasePopupWindow#getDefaultAlphaAnimation
      • 删除方法: BasePopupWindow#getDefaultSlideFromBottomAnimationSet
    • bug修复
      • 修复全屏Activity下focusable没有恢复的问题
      • 修复全屏Activity下SystemUiVisibility被强制修改的问题
      • 修复Quickpopupbuilder中backpressenable设置失效的问题#296
      • 修复非BasePopup内EditText弹出键盘时挡住EditText的问题#297
      • 修复lazypopup中gravity覆盖的问题#310
      • 修复onCreate()下关联锚点View时因未完成测量过程而导致的位置获取不成功问题#313
      • 修复设置最大/最小宽高下测量错误的问题
      • 修复键盘监听在adjustResize下可能会出现的问题#315
      • 修复设置softInputMode重复的问题#314

2.2.3

3 years ago
  • 【Release】2.2.3(2020/05/07)
    • 我们针对2.2.2系列问题进行了修复,同时增加了一些新的功能,欢迎更新到最新版本~
    • 新增功能/方法:
      • 新增setPopupGravityMode():您可以单独设置BasePopup对齐方式而不需要始终带上Gravity
      • 新增OnPopupWindowShowListener接口:在BasePopup显示后回调该接口,当回调该方法时意味着弹窗已经完成,此时ui已经显示在屏幕上
      • 新增bindLifecycleOwner():您现在可以自由绑定您的LifecycleOwner
      • 新增onPreShow()回调:在BasePopup弹出之前回调该方法,如果返回false,则不会弹出
      • 新增onShowing()回调:在BasePopup显示后回调该方法,当回调该方法时意味着弹窗已经完成,此时ui已经显示在屏幕上
      • 新增onPopupLayout()回调:如果弹窗与锚点View关联,当BasePopup在布局的时候回调该方法,分别返回BasePopup在屏幕上的位置和锚点View在屏幕上的位置
      • 新增computeGravity():配套onPopupLayout()回调,计算BasePopup中心点在锚点View的方位。
    • 弃用方法及更替:
      • BasePopupWindow#dismissWithOutAnimate(),请使用dismiss(false)
      • BasePopupWindow#setPopupWindowFullScreen(),请使用setOverlayStatusbar()
      • QuickPopupConfig#dismissOnOutSideTouch(),请使用outSideDismiss()
      • QuickPopupConfig#allowInterceptTouchEvent(),请使用outSideTouchable()
    • 优化:
      • 优化DecorView的查询方式,原逻辑会缓存下查询后的DecorView,但可能会因为该DecorView宿主已经销毁或者变更而导致显示错误
      • 支持的最低版本降至Api 16
      • 放弃反射WindowManager的方式,采取ContextWrapper代理,不再担心遭遇黑灰名单封锁了~感谢@xchengDroid提供的方案
    • bug修复:
      • 修复覆盖状态栏时事件传递存在偏移的情况
      • 修复isShowing()存在空指针的情况(issue:#267)
      • 修复setOverlayStatusbar(false)情况下与Anchor关联时显示位置错误的问题
      • 修复部分引用没有置空导致可能存在的内存泄漏问题(事实上并没发现泄漏)
      • 修复BasePopup弹出时,Activity弹出的输入法显示在BasePopup下层的问题
      • 修复全屏Activity判断错误的问题
      • 修复QuickPopupConfig配置缺漏的问题
      • 修复未弹窗时直接调用dismiss(),然后首次调用showPopupWindow()失效的问题
      • fixed issue:#224