【免费下载链接】SwipeAwayDialog
DialogFragment swipeable away like Tinder UI.
SwipeAwayDialog 是一个让 Android 弹窗支持 Tinder 式滑动关闭的开源库。它在同一个仓库里提供了两个同名的 SwipeAwayDialogFragment 类:一个继承原生 android.app.DialogFragment,一个继承 android.support.v4.app.DialogFragment。很多新手拿到库后最大的困惑就是:这两个类到底该用哪个?这篇文章带你一次性讲清楚。
先搞懂问题根源:为什么有两个版本?
Android 早期系统自带的 DialogFragment 在低版本上存在状态丢失等问题,Google 推出了 Support 支持库,其中包含功能一致的 android.support.v4.app.DialogFragment。因此:
- 原生版:基于
android.app.DialogFragment,依赖系统 API - Support v4 版:基于
android.support.v4.app.DialogFragment,向下兼容更稳
两个类的功能、方法完全对称,区别只在 import 的父类不同。
📌 原生版源码位于:SwipeAwayDialogFragment.java
📌 Support v4 版源码位于:SwipeAwayDialogFragment.java
对比两份代码可以看到,两者实现几乎逐行一致(都通过 onStart 中包裹一层 SwipeableFrameLayout 来接管触摸事件),唯一差异就是 import 语句指向的 DialogFragment 包名。
双版本怎么选?决策清单
| 判断条件 | 推荐版本 |
|---|---|
| 项目基于 AppCompatActivity / 使用了 Support 支持库 | Support v4 版 ✅ |
| Activity 继承自 AppCompatActivity | 必须用 Support v4 版 |
| 纯原生 Activity,未引入 Support 库 | 原生版 |
| 需要兼容 Android 4.4 及更早设备 | Support v4 版 |
一句话结论:如果你的项目里任何一个 Fragment 用的是 android.support.v4.app.Fragment,那么对应的 DialogFragment 就选 com.labo.kaji.swipeawaydialog.support.v4 包下的版本。官方示例 ExampleDialogFragment.java 使用的正是 Support v4 版,并且通过 getSupportFragmentManager() 展示弹窗(见 ExampleActivity.java)。
⚠️ 常见坑:混用两种 Fragment 会抛出 java.lang.IllegalStateException 异常,例如用 getSupportFragmentManager() 展示一个继承原生 DialogFragment 的类。
快速上手:一行 import 决定用哪个
选定版本后,使用方式完全相同——只需把你原来继承的 DialogFragment 换成 SwipeAwayDialogFragment:
// 用这一行替换:import android.app.DialogFragment;
import com.labo.kaji.swipeawaydialog.SwipeAwayDialogFragment;
public class MyDialog extends SwipeAwayDialogFragment {
// 其余实现与普通 DialogFragment 完全一样
}
想要监听"滑动关闭"事件,重写 onSwipedAway 方法即可:
@Override
public boolean onSwipedAway(boolean toRight) {
// toRight 表示向右滑出;返回 true 可取消本次关闭
return false;
}
进阶配置:滑动开关与倾斜特效
两个版本都提供相同的 API,可在代码中随时调整行为:
setSwipeable(boolean):开启或禁用滑动关闭isSwipeable():查询当前是否可滑动setTiltEnabled(boolean):开启/关闭滑动时弹窗的倾斜(3D 旋转)特效isTiltEnabled():查询倾斜特效状态
这些开关在 SwipeAwayDialogFragment.java 中定义,底层由 SwipeDismissTouchListener.java 实现手势追踪与 fling 速度判断,滑动时弹窗会跟随手指平移并略微倾斜,松手后飞出屏幕——这正是 Tinder 卡片的手感来源。
小结
- 选版本只有一件事:看你的 Fragment 父类是原生的还是 Support 支持库的,保持同侧即可
- 两个版本 API 完全一致,未来迁移也只需改一行 import
- 库本体很小,核心仅 4 个类,阅读 README.md 与 library 模块源码即可完全吃透它的实现
- 想动手试效果,可直接参考 example 模块中的完整演示代码
【免费下载链接】SwipeAwayDialog
DialogFragment swipeable away like Tinder UI.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



