SwipeAwayDialog 双版本适配详解:DialogFragment 与 Support v4 到底怎么选?

【免费下载链接】SwipeAwayDialog

DialogFragment swipeable away like Tinder UI.

项目地址: https://gitcode.com/gh_mirrors/sw/SwipeAwayDialog
点击查看 免费下载

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.

项目地址: https://gitcode.com/gh_mirrors/sw/SwipeAwayDialog
点击查看 免费下载

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

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值