junixapp /XPopup
🔥XPopup2.0版本重磅来袭,2倍以上性能提升,带来可观的动画性能优化和交互细节的提升!!!功能强大,交互优雅,动画丝滑的通用弹窗!可以替代Dialog,PopupWindow,PopupMenu,BottomSheet,DrawerLayout,Spinner等组件,自带十几种效果良好的动画, 支持完全的UI和动画自定义!(Powerful and Beautiful Popup for Android,can absolutely replace Dialog,PopupWindow,PopupMenu,BottomSheet,DrawerLayout,Spinner. With built-in animators , very easy to custom popup view.)
★ 8,021⑂ 1,212
8,021
stars
+-1+-2+-4
1,212
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
XPopup
! ! ! ! ! !
!
国内Gitee镜像地址:https://gitee.com/lxj_gitee/XPopup
中文 | English
- 内置几种了常用的弹窗,十几种良好的动画,将弹窗和动画的自定义设计的极其简单;目前还没有出现XPopup实现不了的弹窗效果。
内置弹窗允许你使用项目已有的布局,同时还能用上XPopup提供的动画,交互和逻辑封装。
- UI动画简洁,遵循Material Design,在设计动画的时候考虑了很多细节,过渡,层级的变化
- 交互优雅,实现了优雅的手势交互,智能的嵌套滚动,智能的输入法交互,具体看Demo
- 适配全面屏和各种挖孔屏,目前适配了小米,华为,谷歌,OPPO,VIVO,三星,魅族,一加全系全面屏手机
- 自动监听Activity/Fragment生命周期或任意拥有Lifecycle的UI组件,自动释放资源。在Activity/Fragment直接finish的场景也避免了内存泄漏
- XPopup实现了LifecycleOwner,可以直接被LiveData监视生命周期,弹窗可见时才更新数据,不可见不更新
- 很好的易用性,自定义弹窗只需继承对应的类,实现你的布局,然后像Activity那样,在onCreate方法写逻辑即可
- 性能优异,动画流畅;精心优化的动画,让你很难遇到卡顿场景
- 支持在应用后台弹出(需要申请悬浮窗权限,一行代码即可)
- 支持androidx,完美支持RTL布局,完美支持横竖屏切换,支持小窗模式
- 如果你想要时间选择器和城市选择器,可以使用XPopup扩展功能库XPopupExt: https://github.com/li-xiaojun/XPopupExt
设计思路:
综合常见的弹窗场景,我将其分为几类:
- Center类型,就是在中间弹出的弹窗,比如确认和取消弹窗,Loading弹窗
- Bottom类型,就是从页面底部弹出,比如从底部弹出的分享窗体,知乎的从底部弹出的评论列表,内部已经处理好手势拖拽和嵌套滚动
- Attach类型,就是弹窗的位置需要依附于某个View或者某个触摸点,就像系统的PopupMenu效果一样,但PopupMenu的自定义性很差,淘宝的商品列表筛选的下拉弹窗,微信的朋友圈点赞弹窗都是这种。
- Drawer类型,就是从窗体的坐边或者右边弹出,并支持手势拖拽;好处是与界面解耦,可以在任何界面实现DrawerLayout效果
- ImageViewer大图浏览类型,就像微信那样的图片浏览弹窗,带有良好的拖拽交互体验,内部嵌入了改良的PhotoView和subsampling-scale-imageview,支持加载超长长达图片并且不OOM
- FullScreen类型,全屏弹窗,看起来和Activity一样,可以设置任意的动画器;适合用来实现登录,选择性的界面效果。
- Position自由定位弹窗,弹窗是自由的,你可放在屏幕左上角,右下角,或者任意地方,结合强大的动画器,可以实现各种效果。
演示
|内置弹窗(支持复用已有布局)|列表Center弹窗|
|:---:|:---:|
|!|!|
|Bottom列表弹窗(手势拖拽,横竖滚动) | 自定义Bottom弹窗(天然支持嵌套滚动,多层弹窗)|
|:---:|:---:|
|!|!|
|Attach弹窗(动画优雅,智能定位,长按支持) | 自定义Attach弹窗(任意方向支持,灵活易用)|
|:---:|:---:|
|!|!|
|Drawer弹窗(手势拖拽,状态栏阴影) | 全屏弹窗(可作为Activity替代品,搭配十几个动画使用更佳)|
|:---:|:---:|
|!|!|
|Position自由定位弹窗(放在屏幕任意地方) | 自定义贴在输入法之上的弹窗|
|:---:|:---:|
|!|!|
|PartShadow局部阴影弹窗 | 向上向下都可以|
|:---:|:---:|
|!|!|
|ImageViewer大图浏览弹窗(拖拽自然,如丝般顺滑) | 超长图片,永不OOM(图像渐变过渡,优雅从容)|
|:---:|:---:|
|!|!|
|大图浏览弹窗,支持界面自定义 | 配合ViewPager使用|
|:---:|:---:|
|!|!|
|自定义弹窗和自定义动画 | 内置优雅美观的动画器,可搭配弹窗结合使用|
|:---:|:---:|
|!|!|
|应用后台弹出(一行代码实现权限申请) | 联想搜索实现,轻而易举|
|:---:|:---:|
|!|!|
|气泡弹窗,横向和竖向已准备好!|
|:---:|
|!|
快速体验
Gif录制的有些卡顿,真机预览效果更佳。扫描二维码下载Demo:
!
如果二维码图片不可见,点我下载Demo体验
Gradle
implementation 'com.github.li-xiaojun:XPopup:版本号看上面'
jitpack还要求在工程根目录的build.gradle中添加如下:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
其中编译版本必须 = 29:
compileSdkVersion 29
必须添加的依赖库,版本不用和我一致:
groovy
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
xpopup依赖了subsampling-scale-image-view, 如果你也依赖了这个库并且版本冲突,可以做个exclude即可:
groovy
implementation ('com.github.li-xiaojun:XPopup:版本号看上面'){
exclude group: "com.davemorrissey.labs", module: "subsampling-scale-image-view-androidx"
}
使用文档
具体使用方法全在WIKI中,请查看下面各个章节:
- 如何使用内置的弹窗
- 如何自定义弹窗
- 如何自定义动画
- 弹窗常用设置
- 常见问题(必看))
- 也许你想要这些效果
- 一行代码在应用后台弹出弹窗
- 时间选择器和城市选择器
混淆
-dontwarn com.lxj.xpopup.widget.
-keep class com.lxj.xpopup.widget.{;}
谁在用XPopup
我本人很希望您能点击这里附上使用这个库的App名或者公司名,这样会给我更大的动力和热情去维护这个类库。
根据热心朋友提供的信息,目前使用XPopup的产品