这款第三方插件在github上相当有名,尤其是支持androidx之后,1.8版本之后整体都很稳定,能满足开发需求,但是因为自带的几个弹框都很丑,很长时间以来用的都是自定义,感觉比较繁琐而且没有必要,最近有时间拆解看看如何复用本来就提供的那些pop
-
库组件修改
1)Loading:LoadingPopupView getImplLayoutId
使用layout为R.layout._xpopup_center_impl_loading
框架是LinearLayout内部包含一个com.lxj.xpopup.widget.LoadingView和id为tv_title的TextView
其中LoadingView是一个不能修改颜色"#CCCCCC-#333333",尺寸自适应的组件
2)Confirm确认:ConfirmPopupView getImplLayoutId
使用layout为R.layout._xpopup_center_impl_confirm
框架是内部包含LinearLayout内部包含两个textView,一个EditView两个button
tv_title和tv_content显示文字,et_input输入和执行操作,tv_cancel和tv_confirm执行
3)单输入框带确认取消:InputConfirmPopupView
使用layout与ConfirmPopupView相同,继承自ConfirmPopupView
4)显示在中间的列表Popup:CenterListPopupView
使用layout为_xpopup_center_impl_list,其内部控件为LinearLayout,包含一个TextView的title,和VerticalRecyclerView的recyclerView,缺点是使用的adapter为EasyAdapter,类型限定为String[]比较死板,因此含有列表类的我都推荐自定义
5)宽高盛满全屏:FullScreenPopupView
没有任何内容,因此没有layout,只是起到撑开的作用
6)显示在底部的列表Popup:BottomListPopupView getImplLayoutId
使用layout为_xpopup_center_impl_list,同CenterListPopupView。
7)依附于某View的列表弹窗:AttachListPopupView getImplLayoutId
layout为R.layout._xpopup_attach_impl_list,layout中只有一个根节点VerticalRecyclerView
,其继承自RecyclerView,是列表显示的核心控件
8)局部阴影的弹窗PartShadowPopupView getImplLayoutId
说明曰:类似于淘宝商品列表的下拉筛选弹窗,可放于任意位置,继承使用需要实现getImplLayoutId -
原生库说明:
1)居中Pop:CenterPopupView getPopupLayoutId
默认返回_xpopup_center_popup_view,根节点为FrameLayout,使用时应用根节点最好为LinearLayout
2)底部弹出:BottomPopupView
layout为_xpopup_bottom_popup_view,根节点为SmartDragLayout,使用时应用根节点最好为LinearLayout
3)带drawer的弹窗:DrawerPopupView
默认返回,根节点为drawerLayout PopupDrawerLayout,就是drawer部分,内部包含节点为drawerContentContainer FrameLayout,
4)依附于某View的列表:AttachPopupView
layout为R.layout._xpopup_attach_popup_view,同PositionPopupView,layout中只有一个根节点PartShadowContainer
,contentView获取的是整个View
5)水平方向依附View:HorizontalAttachPopupView
6)自由定位的弹窗(允许居中):PositionPopupView
layout为R.layout._xpopup_attach_popup_view,同AttachPopupView,layout中只有一个根节点PartShadowContainer
,contentView获取的是整个View
根据设置判断是否居中,如果居中取屏幕宽度与当前窗体之差的一半,设置为左上点;不居中则按照配置中的(x,y)定位与屏幕
7)大图浏览:ImageViewerPopupView
使用layout为_xpopup_image_viewer_popup_view,其中包括两个自定义组件:用于大图浏览弹窗显示后的有边白色占位View BlankView和核心部件ViewPager用于幻灯片播放的PhotoViewContainer,底部显示有text用于显示图片页码和保存button -
XPopup配置修改
1)背景色修改:shadowBgColor,default:#9F000000
2)状态栏背景色修改:statusBarShadowColor,default:#55000000
3)主色调修改:primaryColor,default:#121212
4)动画持续时间:animationDuration,default:360
注意设置的颜色接受为:Color的int值包括:
注意:PopupInfo中有全部可配置的选项的详细说明,setBackground允许修改的背景色都是面板的而非半透明背景的。如设置该背景为颜色,在第一次弹出时会有充满全屏的效果一闪而过,犹如bug需要注意 -
XPopup是否Show的判断
这个问题在1.8之前都很苦手,但1.8更新之后得到了解决,我目前的版本是1.8.10
判断弹窗是否show目前有两个方法
1)testDialog.isShown
isShown是View的方法,根据说明当View的所有祖先可见性都是VISIBLE,则返回VISIBLE
2)public boolean isShow()
弹窗基类BasePopupView的方法,返回的是当前状态标志位
return popupStatus != PopupStatus.Dismiss;
经过实际测试发现两者返回值一致