ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

XPopup:Android 弹窗组件完整使用指南(从集成到自定义)

2026/9/20 17:57:36 拓冰建站 浏览量
XPopup:Android 弹窗组件完整使用指南(从集成到自定义) XPopupAndroid 弹窗组件完整使用指南从集成到自定义【免费下载链接】XPopupXPopup2.0版本重磅来袭2倍以上性能提升带来可观的动画性能优化和交互细节的提升功能强大交互优雅动画丝滑的通用弹窗可以替代DialogPopupWindowPopupMenuBottomSheetDrawerLayoutSpinner等组件自带十几种效果良好的动画 支持完全的UI和动画自定义(Powerful and Beautiful Popup for Androidcan absolutely replace DialogPopupWindowPopupMenuBottomSheetDrawerLayoutSpinner. With built-in animators , very easy to custom popup view.)项目地址: https://gitcode.com/GitHub_Trending/xpo/XPopup做 Android 弹窗绕不开三个问题怎么快速弹出、怎么改样式、怎么不乱。XPopup 是一个 Android 弹窗组件库内置确认、加载、列表等常用弹窗提供 7 类弹窗基类和十几种现成动画目标是替掉 Dialog、PopupWindow、PopupMenu、BottomSheet、DrawerLayout、Spinner 这一堆各自为政的组件。本文按集成 → 场景 → 进阶 → 排错的顺序走一遍代码都给了可运行的最小写法。一、集成改 2 个文件跑起来第一个弹窗仓库和依赖怎么加第一步在工程根目录的build.gradle里加 jitpack 仓库allprojects { repositories { ... maven { url https://jitpack.io } } }第二步在 app 模块的build.gradle加依赖。XPopup 通过 jitpack 分发必须配套 appcompat、material、recyclerview 三个库implementation com.github.li-xiaojun:XPopup:2.9.19 implementation androidx.appcompat:appcompat:1.3.1 implementation com.google.android.material:material:1.4.0 implementation androidx.recyclerview:recyclerview:1.2.1如果项目里已经有subsampling-scale-image-view且版本冲突在 XPopup 依赖上加exclude group: com.davemorrissey.labs, module: subsampling-scale-image-view-androidx即可。第一个弹窗确认弹窗是 XPopup 内置实现标题、内容、回调都是参数不用写任何布局XPopup.Builder(this) .asConfirm(提示, 确定要删除这个项目吗, () - { /* 确认回调 */ }, () - { /* 取消回调 */ }) .show(); XPopup.Builder(this).asLoading(加载中...).show();到这里XPopup 已经可以替代你项目里大部分AlertDialog和ProgressDialog的用法。二、按场景选弹窗4 类高频用法XPopup 把弹窗按从哪里出来分成 Center居中、Bottom底部、Attach依附、Drawer左右抽屉等类型。仓库library/src/main/java/com/lxj/xpopup/core/下每个类型都有独立基类选对类型手势和动画就都是现成的。底部弹窗分享面板、评论列表XPopup.Builder(this) .asBottomList(请选择, new String[]{选项1, 选项2, 选项3}, (position, text) - { /* 选中回调 */ }) .show();底部弹窗上滑可关闭内部列表滚动和手势拖拽是内置处理好的不用自己写。依附弹窗替掉 PopupMenuXPopup.Builder(this) .asAttachList( new String[]{分享, 收藏, 举报}, new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher}, (position, text) - { /* 选中回调 */ }, targetView) .show();第四个参数targetView是依附对象XPopup 会自己算出弹出位置和方向。抽屉弹窗不用 DrawerLayout 也能有抽屉抽屉弹窗没有独立快捷方法写法是继承DrawerPopupView做自定义弹窗见下节再走asCustomXPopup.Builder(this) .asCustom(new ListDrawerPopupView(this)) .show();好处是不必把整个 Activity 绑死在 DrawerLayout 上任何页面随时能弹。其他类型的快速清单大图浏览asImageViewer(srcView, url, imageLoader)内置 PhotoView支持超长图不 OOM全屏弹窗FullScreenPopupView可当轻量 Activity 用自由定位PositionPopupView弹窗可以放在屏幕任意坐标气泡弹窗BubbleAttachPopupView竖排横排都有三、自定义弹窗与自定义动画自定义弹窗的三步布局、子类、onCreateXPopup 教程里最高频的一节就是自定义。思路很简单内置弹窗是布局 逻辑分离的你提供布局逻辑写在onCreate里。以居中弹窗为例public class CustomCenterPopup extends CenterPopupView { public CustomCenterPopup(NonNull Context context) { super(context); } Override protected void onCreate() { super.onCreate(); findViewById(R.id.btn_confirm).setOnClickListener(v - dismiss()); } }getImplLayoutId()由bindLayoutId机制处理——你可以在构建时用bindLayoutId(R.layout.xxx)挂任意已有布局不必写死在代码里。使用时XPopup.Builder(this) .asCustom(new CustomCenterPopup(this)) .show();XPopup 自定义弹窗就这一套模式换继承的基类 换弹窗位置剩下的全是你自己的布局。动画20 种内置 完全自定义PopupAnimation枚举里有 20 种动画中心缩放、四角缩放、四方向平移、八方向滑动、无动画一行切换XPopup.Builder(this) .asConfirm(标题, 内容) .popupAnimation(PopupAnimation.ScaleAlphaFromCenter) .show();要写自己的动画继承com.lxj.xpopup.animator.PopupAnimator实现 3 个抽象方法public class MyAnimator extends PopupAnimator { public MyAnimator(View target, int duration) { super(target, duration); } Override public void initAnimator() { } // 初始化只调一次 Override public void animateShow() { /* 显示动画 */ } Override public void animateDismiss() { /* 消失动画 */ } }observerAnimator()可以挂你的 ValueAnimator / ViewPropertyAnimator动画播完自动解锁手势不用自己记标志位。四、白拿的能力不写代码就有的行为手势关闭底部弹窗上滑关、中间弹窗下滑关手势拖拽内置在基类里键盘避让autoOpenSoftInput(true)后输入框在弹窗里不会被软键盘挡住生命周期XPopup 自动监听 Activity/Fragment 生命周期释放资源页面 finish 时不会留泄漏它本身实现了 LifecycleOwnerLiveData 可以直接观察弹窗状态五、避坑清单弹窗不显示确认show()在主线程调用、当前 Activity/Fragment 还在前台、布局资源 ID 没写错动画掉帧精简弹窗布局层级别在动画回调里做 IO 或数据库操作依赖冲突出现subsampling-scale-image-view冲突时按第一节加 exclude混淆发正式版要在 ProGuard 里保留 widget 包-dontwarn com.lxj.xpopup.widget.** -keep class com.lxj.xpopup.widget.**{*;}下一步建议把仓库app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java里的 20 多个 Demo 点一遍比读文档快得多每个类型都有可运行的真机效果。【免费下载链接】XPopupXPopup2.0版本重磅来袭2倍以上性能提升带来可观的动画性能优化和交互细节的提升功能强大交互优雅动画丝滑的通用弹窗可以替代DialogPopupWindowPopupMenuBottomSheetDrawerLayoutSpinner等组件自带十几种效果良好的动画 支持完全的UI和动画自定义(Powerful and Beautiful Popup for Androidcan absolutely replace DialogPopupWindowPopupMenuBottomSheetDrawerLayoutSpinner. With built-in animators , very easy to custom popup view.)项目地址: https://gitcode.com/GitHub_Trending/xpo/XPopup创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考