Android下打造通用便捷的PopupWindow弹窗库
hideKeyboardOnShow(boolean)
,是否在BasePopup显示时收起键盘,默认收起
onOutSideTouch
增加isMaskPressed标记onCreateConstructor
:该方法实际上是给BaseLazyPopupWindow使用的,现在没有了BaseLazyPopupWindow,自然不需要该方法onCreateContentView
:该方法的删除将会影响所有的BasePopupWindow子类,您需要手动去改动
setContentView(@LayoutRes int layoutResID)
或setContentView(final View view)
所代替,您需要修改其使用。setContentView(final View view)
,我们依然建议您用setContentView(createPopupById(layoutResID)),以便我们解析到正确的xml配置。update(float,float)
失效的问题setOverlayStatusbarMode
,设置BasePopupFlag.OVERLAY_CONTENT或者BasePopupFlag.OVERLAY_MASK其一或相加的时候,将允许蒙层或内容层覆盖状态栏setOverlayNavigationBarMode
,设置BasePopupFlag.OVERLAY_CONTENT或者BasePopupFlag.OVERLAY_MASK其一或相加的时候,将允许蒙层或内容层覆盖导航栏setMaskOffsetX
,设置蒙层水平方向上的偏移setMaskOffsetY
,设置蒙层垂直方向上的偏移setOverlayStatusbarMode
-> overlayStatusbarMode
setOverlayNavigationBarMode
-> overlayNavigationBarMode
setMaskOffsetX
-> maskOffsetX
setMaskOffsetY
-> maskOffsetY
onBeforeDismiss
,作用同OnDismissListener#onBeforeDismiss()setTouchable
,该方法用于设置是否允Popup是否响应事件,如果不响应,则事件会穿透PopupsetAdjustInputMode(View,flag)
#358
preMeasure()
,预测量contentView,该方法将会进行measure,但是不能保证能够准确测量(如recyclerview未设置adapter时)getPreMeasureWidth()
,获取预测量后的宽度getPreMeasureHeight()
,获取预测量后的高度updateKeyboardAlign()
,该方法允许您手动通知BasePopup根据键盘对齐模式对齐键盘onWindowFocusChanged
回调getWindowManager
:获取BasePopup的WindowManager代理getBasePopupDecorViewProxy
:获取BasePopup最终的DecorView代理getDecorViewLayoutParams
:获取BasePopup最终DecorView的LayoutParamsonPreShow
-> onBeforeShow
getWidth()
,只能在PopupWindow显示后才能正确获取宽度getHeight()
,只能在PopupWindow显示后才能正确获取高度getLocationOnScreen
改为getLocationInWindow
的原因,在群里讨论过后,决定采取原方案,统一以Screen作为参考,解决Window位置不一样而带来的Popup显示位置不正确的问题overlayStatusBar(false)
下模糊的图像仍然包含了状态栏,导致模糊的图像是错误的,2.2.7已修复width>0
或者height>0
,会发生裁剪问题,这是因为其父类DecorView也被设置为一样的大小,2.2.7将Margin一并考虑,对DecorView大小做出相应的适配width>0
或者height>0
,同时没有关联AnchorView时,会发生裁剪问题,裁剪大小刚好是NavigationBar的大小,2.2.7修复了这个问题*【Release】2.2.5(2020/08/13)
在2.2.4中我们发现setMaxWidth/setMaxHeight出现错误,因此我们紧急发布2.2.4.1,请使用2.2.4的用户尽快升级到2.2.4.1
AnimationHelper
,在它的帮助下,创建BasePopup动画将会变得十分简单易懂,同时我们也增加了很多很棒的功能,欢迎更新到2.2.4版本~CalledFromWrongThreadException
异常OnKeyboardChangeListener
:现在您可以监听键盘显示、关闭事件,同时该回调会返回键盘的大小KeyEventListener
:现在允许您在外部添加事件监听,感谢issue:#296
setOverlayNavigationBar
:通过该方法,您可以让您的BasePopup覆盖到导航栏,默认情况下不允许覆盖,如果您确实有需要,可以通过该api配置覆盖
setWidthAsAnchorView
:您可以调用该Api决定BasePopup的宽度是否设置为AnchorView的宽度setHeightAsAnchorView
:您可以调用该Api决定BasePopup的高度是否设置为AnchorView的高度setLayoutDirection
方向,告诉BasePopup宿主布局方向showPopupWindow(View anchorView)
和showPopupWindow(int x,int y)
有效syncMaskAnimationDuration
:您可以设置蒙层动画的事件是否同步您的动画时间(取最长时间),默认同步syncMaskAnimationDuration
配置是否同步setPopupGravityMode()
:您可以单独设置BasePopup对齐方式而不需要始终带上GravityOnPopupWindowShowListener
接口:在BasePopup显示后回调该接口,当回调该方法时意味着弹窗已经完成,此时ui已经显示在屏幕上bindLifecycleOwner()
:您现在可以自由绑定您的LifecycleOwneronPreShow()
回调:在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()