news 2026/8/19 21:28:04

3分钟集成NiceDialog:基于DialogFragment的Android弹窗库快速上手教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3分钟集成NiceDialog:基于DialogFragment的Android弹窗库快速上手教程

3分钟集成NiceDialog:基于DialogFragment的Android弹窗库快速上手教程

【免费下载链接】NiceDialogA nice dialog, that is based on DialogFragment项目地址: https://gitcode.com/gh_mirrors/ni/NiceDialog

在 Android 开发中,弹窗(Dialog)几乎是每个应用都绕不开的功能,但传统AlertDialog写法繁琐、样式难调,还要处理屏幕旋转和生命周期问题。今天要介绍的NiceDialog,是一款基于DialogFragment的轻量级Android 弹窗库,主打"一行代码弹窗",只需 3 分钟即可完成集成并跑出第一个弹窗,无论新手还是老手都能快速上手。

上图是 NiceDialog 示例工程中红包弹窗的效果,只需指定一张布局,就能做出这种高颜值弹窗。

NiceDialog 是什么?凭什么好用?

NiceDialog 在DialogFragment之上做了一层简洁封装,核心代码集中在 BaseNiceDialog.java 和 NiceDialog.java 两个文件里,设计非常轻巧。它解决了原生弹窗的三大痛点:

  • 写法简单:链式调用,一行代码完成弹窗创建与展示
  • 生命周期安全:基于 Fragment 实现,屏幕旋转自动保存、恢复弹窗状态
  • 动画随心配:内置上下左右进出场动画,一行配置即可切换

3分钟快速集成 NiceDialog 的完整步骤

第一步:添加 JitPack 仓库与依赖

在项目根目录的build.gradle中配置 JitPack 仓库,然后添加依赖即可,整个过程无需 clone 源码:

allprojects { repositories { maven { url "https://jitpack.io" } } }
dependencies { implementation 'com.github.SheHuan:NiceDialog:1.2.0' }

如果你想阅读或修改源码,也可以直接 clone 仓库体验完整示例工程:git clone https://gitcode.com/gh_mirrors/ni/NiceDialog,弹窗库本体位于nicedialog/目录,演示代码位于app/目录。

第二步:用一行代码弹出第一个弹窗

依赖同步完成后,在 Activity 里写下这段代码即可看到弹窗效果:

NiceDialog.init() .setLayoutId(R.layout.dialog) // 指定弹窗布局 .setConvertListener((holder, dialog) -> { // 在这里给弹窗里的控件绑定事件 }) .show(getSupportFragmentManager()); // 显示弹窗

没错,核心就三步:指定布局 → 绑定控件 → show 展示。更多完整示例可以参考演示工程中的 MainActivity.java,里面内置了分享、好友设置、评论、红包、加载提示等 7 种弹窗。

第三步:常用配置速查表

NiceDialog 提供了丰富的链式配置方法,这张速查表帮你快速找到想要的配置:

配置方法作用默认值
setGravity()弹窗位置(居中 / 底部 / 右侧等)居中
setMargin()弹窗左右边距(dp)0
setWidth() / setHeight()弹窗宽高(dp)屏幕宽 / WRAP_CONTENT
setDimAmount()背景遮罩透明度 [0-1]0.5
setOutCancel()点击外部是否关闭true
setAnimStyle()进出场动画跟随位置自动匹配

💡 小提示:setMargin()setWidth()二选一使用即可,避免配置冲突。

进阶玩法:如何打造底部弹窗与自定义动画

最快的底部弹窗配置方法

常见的"底部弹出分享面板",只需两行配置:

NiceDialog.init() .setLayoutId(R.layout.share_layout) .setGravity(Gravity.BOTTOM) // 底部弹出 .show(getSupportFragmentManager());

设置Gravity.BOTTOM后,NiceDialog 会自动匹配底部进出场动画(动画资源位于nicedialog/src/main/res/anim/目录),无需手动指定。

继承 BaseNiceDialog 打造可复用弹窗

如果同一弹窗需要在多个页面复用,推荐继承BaseNiceDialog,并使用原生 Fragment 传参方式传递数据:

public class ConfirmDialog extends BaseNiceDialog { public static ConfirmDialog newInstance(String type) { Bundle bundle = new Bundle(); bundle.putString("type", type); ConfirmDialog dialog = new ConfirmDialog(); dialog.setArguments(bundle); return dialog; } // 实现 intLayoutId() 与 convertView() 两个抽象方法即可 }

展示时依旧一行搞定:ConfirmDialog.newInstance("1").setMargin(60).setOutCancel(false).show(...)

自定义动画的小技巧

NiceDialog 默认主题继承自Theme.AppCompat.Light.Dialog,可在 styles.xml 中查看默认动画风格。想自定义进出场动画,只需写一个 Animation 风格再通过setAnimStyle()传入,例如"缩放 + 渐变"的组合动画:

<style name="MyAnim" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/enter</item> <item name="android:windowExitAnimation">@anim/exit</item> </style>

结语:为什么推荐用 NiceDialog 做 Android 弹窗?

总结下来,NiceDialog 作为一款基于 DialogFragment 的 Android 弹窗库,把"配置繁琐、样式难调"的弹窗开发压缩到了极致:3 分钟集成、一行代码弹窗、内置动画、生命周期安全。如果你正在寻找一款简单好用的 Android 弹窗解决方案,不妨现在就上手试试吧!🚀

【免费下载链接】NiceDialogA nice dialog, that is based on DialogFragment项目地址: https://gitcode.com/gh_mirrors/ni/NiceDialog

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 21:27:41

Operative 回调机制深度解析:为什么最后一个参数必须是回调?

Operative 回调机制深度解析&#xff1a;为什么最后一个参数必须是回调&#xff1f; 【免费下载链接】operative :dog2: Seamlessly create Web Workers 项目地址: https://gitcode.com/gh_mirrors/op/operative Operative 是一个用于无缝创建 Web Worker 的轻量级 Java…

作者头像 李华
网站建设 2026/8/19 21:25:06

Arduino交通灯项目实战:从电路设计到状态机编程与扩展

1. 项目缘起&#xff1a;为什么一个“小交通灯”值得深挖&#xff1f;最近在整理工作室的旧零件盒&#xff0c;翻出来一堆闲置的LED、电阻和一块Arduino Nano&#xff0c;看着它们&#xff0c;一个念头突然冒出来&#xff1a;为什么不把这些零散的东西变成一个有点意思的桌面摆…

作者头像 李华
网站建设 2026/8/19 21:24:56

Arduino接近传感器与OLED显示:构建智能感知交互系统

1. 项目概述&#xff1a;当OLED“看见”你的靠近在嵌入式开发和人机交互的领域里&#xff0c;我们总在追求更智能、更自然的互动方式。想象一下&#xff0c;一个设备能够感知你的存在&#xff0c;并在你靠近时主动亮起屏幕&#xff0c;展示关键信息&#xff0c;而在你离开后悄然…

作者头像 李华
网站建设 2026/8/19 21:22:14

CAD图形高效处理:从边界创建到成块成组的完整指南

这次我们来看一个在 CAD 设计领域非常实用的功能&#xff1a;如何将多个分散的图形对象&#xff08;如线条、多段线、圆等&#xff09;快速合并成一个“块”或“组”&#xff0c;并自动为其创建外轮廓边界。这个操作对于图纸整理、面积计算、批量加工路径生成等场景至关重要。如…

作者头像 李华
网站建设 2026/8/19 21:19:40

请求对象和响应对象学习

在 Java Web 开发中&#xff0c;HttpServletRequest 和 HttpServletResponse 是两个至关重要的对象。每当客户端发送一个 HTTP 请求&#xff0c;Web 服务器&#xff08;如 Tomcat&#xff09;就会为这次请求创建一个 request 对象和一个 response 对象。request 对象&#xff1…

作者头像 李华