3.1.0
- 【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:
- 【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.x版本,请务必阅读以下两项事项:
2.2.10
- 【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
- 增加上述方法,为配合Builder语法,上述方法稍作更名:
- 优化状态栏、导航栏的覆盖:
- 【修复】
- 修复BaseLazyPopupWindow中键盘不自动弹出的问题 #363
- 【优化】
2.2.9
- 【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
- 【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
- 【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修复了这个问题
- Popup在非全屏Dialog的位置显示仍然有异常,经过排查发现是2.2.6版本从
2.2.6
-
【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
*【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
在2.2.4中我们发现setMaxWidth/setMaxHeight出现错误,因此我们紧急发布2.2.4.1,请使用2.2.4的用户尽快升级到2.2.4.1
2.2.4
- 【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
- 如果使用RTL,请务必设置
- 增加
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.4版本中,我们添加了非常棒的
- 【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修复: