FloatingX
FloatingX 是一个灵活且强大的 Android 悬浮窗解决方案框架,支持系统级悬浮窗、应用内悬浮窗和局部悬浮窗三种模式。该技能指导 AI 编码智能体正确集成和使用 FloatingX 库,涵盖 Gradle 依赖配置、Builder API、控制接口、监听器、JetPack Compose 支持及常见开发模式,帮助开发者快速实现悬浮窗功能。
支持的悬浮窗类型
| 类型 | 枚举值 | 权限要求 | 实现方案 | 适用场景 |
|---|---|---|---|---|
| 应用内浮窗 | FxScopeType.APP |
无 | 插入 DecorView | 仅在 App 内显示,最简单 |
| 系统级浮窗 | FxScopeType.SYSTEM |
SYSTEM_ALERT_WINDOW |
WindowManager | 跨 App 全局显示,如悬浮球、通知栏浮窗 |
| 自动降级浮窗 | FxScopeType.SYSTEM_AUTO |
可选 | 优先 System,无权限降级为 App | 兼容性最佳方案 |
| 局部浮窗 | FxScopeHelper |
无 | 指定 ViewGroup / Fragment / Activity | 局限于特定页面区域 |
核心能力
- JetPack Compose 支持 — 通过
enableComposeSupport()启用,系统级浮窗可渲染 Compose 内容 - 浮窗半隐藏模式 — 拖至边缘自动半隐,可配置隐藏比例(0~0.9)
- 自定义显示/隐藏动画 — 继承
FxAnimation实现fromAnimator()和toAnimator() - 多指触摸 — 精准决策触摸手势,支持事件拦截
- 位置持久化 — 通过
IFxConfigStorage接口保存/恢复浮窗历史位置 - 越界回弹 + 边缘吸附 — 支持 configurable 吸附方向(上下左右组合)
- 黑名单/白名单 — 指定页面禁止或允许显示浮窗
- 多浮窗管理 — 通过
setTag()区分不同浮窗,支持同时管理多个 - 权限拦截器 — 自定义系统悬浮窗权限请求流程,支持降级策略
- 安全区域 — 避免浮窗覆盖状态栏和导航栏
- 键盘适配 — System 浮窗支持键盘弹出/关闭自适应
API 架构
入口点
- 全局浮窗:
FloatingX.install {}(Kotlin DSL) 或FloatingX.install(AppHelper)(Java) - 局部浮窗:
FxScopeHelper.builder().build().toControl(activity/fragment/viewGroup)或createFx {}委托
### 通用配置项(20+)
| 类别 | 方法 | 说明 |
| -------- | -------------------------------------------------------- | -------------------------------- |
| 布局 | `setLayout(layoutId)` / `setLayoutView(view)` | 设置浮窗内容 |
| 位置 | `setGravity(FxGravity)` | 9 种预设位置 |
| 偏移 | `setOffsetXY(x, y)` | 基于 Gravity 的相对偏移 |
| 显示模式 | `setDisplayMode(FxDisplayMode)` | Normal / ClickOnly / DisplayOnly |
| 边缘吸附 | `setEnableEdgeAdsorption()` + `setEdgeAdsorbDirection()` | 6 种吸附方向 |
| 越界回弹 | `setEnableScrollOutsideScreen()` | 允许拖出屏幕边界 |
| 边距 | `setBorderMargin(t, l, b, r)` | 限制可移动区域 |
| 动画 | `setEnableAnimation()` + `setAnimationImpl()` | 自定义进出动画 |
| 半隐藏 | `setEnableHalfHide()` + `setHalfHidePercent()` | 边缘半隐模式 |
| 点击 | `setOnClickListener(time, listener)` | 带防抖点击 |
| 长按 | `setOnLongClickListener(listener)` | 长按事件 |
| 触摸 | `setTouchListener(IFxTouchListener)` | 手势监听 |
| 生命周期 | `addViewLifecycle(IFxViewLifecycle)` | 视图创建/附着/分离回调 |
| 位置存储 | `setSaveDirectionImpl(IFxConfigStorage)` | 持久化浮窗位置 |
| 日志 | `setEnableLog(true, tag)` | 调试日志 |
### 控制接口
```kotlin
// 基础控制 (IFxControl)
control.show() // 显示
control.hide() // 隐藏(保留绑定)
control.cancel() // 移除并释放
control.move(x, y) // 移动到指定位置
control.moveByVector(dx, dy) // 向量移动
control.updateView(layoutId) // 替换浮窗内容
control.getView() // 获取内容 View
control.getViewHolder() // 获取 ViewHolder
// 运行时配置 (IFxConfigControl)
control.configControl.setDisplayMode(FxDisplayMode.ClickOnly)
control.configControl.setEnableAnimation(true)
control.configControl.setEnableEdgeAdsorption(false)
control.configControl.setBorderMargin(100f, 100f, 100f, 100f)
control.configControl.clearLocationStorage()
Gradle 集成
dependencies {
implementation 'io.github.petterpx:floatingx:2.3.7'
// Compose 支持系统级浮窗(可选)
implementation 'io.github.petterpx:floatingx-compose:2.3.7'
}
AndroidManifest(仅 System 级需要)
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
v2.3.7
2026-08-03
下载