## XPopup
![](https://api.bintray.com/packages/li-xiaojun/jrepo/xpopup/images/download.svg) ![](https://img.shields.io/badge/platform-android-blue.svg) ![](https://img.shields.io/badge/author-li--xiaojun-brightgreen.svg) ![](https://img.shields.io/badge/compileSdkVersion-28-blue.svg) ![](https://img.shields.io/badge/minSdkVersion-19-blue.svg) ![](https://img.shields.io/hexpm/l/plug.svg)
![](screenshot/logo.png)
国内Gitee镜像地址:https://gitee.com/lxj_gitee/XPopup
## 好站推荐
1. 全网价格最低的公众号和小程序微商城。官网:https://www.xingke.vip
2. 稳定唯屁恩上网工具推荐:https://tg803.cc/#/register?code=zCYK1QzU
### 中文 | [English](https://github.com/li-xiaojun/XPopup/blob/master/README-en.md)
- 内置几种了常用的弹窗,十几种良好的动画,将弹窗和动画的自定义设计的极其简单;目前还没有出现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弹窗|
|:---:|:---:|
|![](screenshot/inset1.gif)|![](screenshot/inset2.gif)|
|Bottom列表弹窗(手势拖拽,横竖滚动) | 自定义Bottom弹窗(天然支持嵌套滚动,多层弹窗)|
|:---:|:---:|
|![](screenshot/bottom1.gif)|![](screenshot/bottom2.gif)|
|Attach弹窗(动画优雅,智能定位,长按支持) | 自定义Attach弹窗(任意方向支持,灵活易用)|
|:---:|:---:|
|![](screenshot/attach1.gif)|![](screenshot/attach2.gif)|
|Drawer弹窗(手势拖拽,状态栏阴影) | 全屏弹窗(可作为Activity替代品,搭配十几个动画使用更佳)|
|:---:|:---:|
|![](screenshot/drawer.gif)|![](screenshot/full.gif)|
|Position自由定位弹窗(放在屏幕任意地方) | 自定义贴在输入法之上的弹窗|
|:---:|:---:|
|![](screenshot/position.gif)|![](screenshot/input.gif)|
|PartShadow局部阴影弹窗 | 向上向下都可以|
|:---:|:---:|
|![](screenshot/partshadow1.gif)|![](screenshot/partshadow2.gif)|
|ImageViewer大图浏览弹窗(拖拽自然,如丝般顺滑) | 超长图片,永不OOM(图像渐变过渡,优雅从容)|
|:---:|:---:|
|![](screenshot/imageviewer1.gif)|![](screenshot/imageviewer2.gif)|
|大图浏览弹窗,支持界面自定义 | 配合ViewPager使用|
|:---:|:---:|
|![](screenshot/imageviewer3.gif)|![](screenshot/imageviewer4.gif)|
|自定义弹窗和自定义动画 | 内置优雅美观的动画器,可搭配弹窗结合使用|
|:---:|:---:|
|![](screenshot/custom.gif)|![](screenshot/animators.gif)|
|应用后台弹出(一行代码实现权限申请) | 联想搜索实现,轻而易举|
|:---:|:---:|
|![](screenshot/background.gif)|![](screenshot/search.gif)|
|气泡弹窗,横向和竖向已准备好!|
|:---:|
|![](screenshot/bubble.gif)|
## 快速体验
Gif录制的有些卡顿,真机预览效果更佳。扫描二维码下载Demo:
![](screenshot/download.png)
如果二维码图片不可见,[点我下载Demo体验](https://www.pgyer.com/pIWo)
## Gradle
[![](https://jitpack.io/v/li-xiaojun/XPopup.svg)](https://jitpack.io/#li-xiaojun/XPopup)
```
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中,请查看下面各个章节:
- [如何使用内置的弹窗](https://github.com/li-xiaojun/XPopup/wiki/2.-%E5%86%85%E7%BD%AE%E7%9A%84%E5%BC%B9%E7%AA%97%E5%AE%9E%E7%8E%B0)
- [如何自定义弹窗](https://github.com/li-xiaojun/XPopup/wiki/3.-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%B9%E7%AA%97)
- [如何自定义动画](https://github.com/li-xiaojun/XPopup/wiki/4.-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8A%A8%E7%94%BB)
- [弹窗常用设置](https://github.com/li-xiaojun/XPopup/wiki/5.-%E5%B8%B8%E7%94%A8%E8%AE%BE%E7%BD%AE)
- [常见问题(必看)](https://github.com/li-xiaojun/XPopup/wiki/6.-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98(%E5%BF%85%E7%9C%8B))
- [也许你想要这些效果](https://github.com/li-xiaojun/XPopup/wiki/7.-%E4%B9%9F%E8%AE%B8%E4%BD%A0%E6%83%B3%E8%A6%81%E8%BF%99%E4%BA%9B%E6%95%88%E6%9E%9C)
- [一行代码在应用后台弹出弹窗](https://github.com/li-xiaojun/XPopup/wiki/8.-%E4%B8%80%E8%A1%8C%E4%BB%A3%E7%A0%81%E5%9C%A8%E5%BA%94%E7%94%A8%E5%90%8E%E5%8F%B0%E5%BC%B9%E5%87%BA%E5%BC%B9%E7%AA%97)
- [时间选择器和城市选择器](https://github.com/li-xiaojun/XPopup/wiki/9.-%E6%88%91%E6%83%B3%E8%A6%81%E6%97%B6%E9%97%B4%E9%80%89%E6%8B%A9%E5%99%A8%E6%88%96%E5%9F%8E%E5%B8%82%E9%80%89%E6%8B%A9%E5%99%A8%E5%BC%B9%E7%AA%97)
## 混淆
```
-dontwarn com.lxj.xpopup.widget.**
-keep class com.lxj.xpopup.widget.**{*;}
```
## 谁在用XPopup
我本