更新记录
1.1.0(2026-05-08)
1.去除编译时候的警告提示
1.0.0(2026-05-07)
1.实现悬浮窗 2.可以自由拖拽 3.支持html 4.自动吸附左右两边 5.支持点击返回指定目标页面
平台兼容性
uni-app(4.25)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | × | × | √ | √ | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
zf-floating-window
Android 系统悬浮窗 UTS 插件,适用于 uni-app 的 App-Android 场景。
Demo 下载体验
- APK 下载链接:
https://env-00jy62hjm7re.normal.cloudstatic.cn/__UNI__DEBC854__20260507184103.apk?expire_at=1778207006&er_sign=1c8604d7a591331457c69e5b7b46fdcd - 手机扫码下载体验:
支持能力:
- 检查悬浮窗权限
- 跳转系统授权页
- 显示/更新/隐藏系统悬浮窗
- 支持原生按钮悬浮窗
- 支持 WebView / HTML 悬浮窗
- 支持拖动、吸边
- 点击悬浮窗回到应用
- 回到应用后跳转指定页面
- 可扩展视频悬浮按钮、HTML 内容悬浮层
注意事项:
- 当前主要面向
uni-app的App-Android项目 - H5、小程序、iOS、Harmony 当前不支持
SYSTEM_ALERT_WINDOW需要用户手动授权- WebView 视频悬浮层建议真机测试
兼容说明
- 运行平台:
App-Android - 最低 HBuilderX 版本:
4.25 - 插件类型:
UTS 原生 API 插件
需要的系统权限
本插件当前使用到以下 Android 权限:
android.permission.SYSTEM_ALERT_WINDOWandroid.permission.FOREGROUND_SERVICEandroid.permission.REORDER_TASKS
说明:
SYSTEM_ALERT_WINDOW:显示系统级悬浮窗FOREGROUND_SERVICE:以前台服务承载悬浮窗REORDER_TASKS:辅助应用任务切回前台
安装方式
将插件安装到项目的 uni_modules/zf-floating-window 目录后,在 manifest.json 中确认 Android 权限配置已存在。
如果你直接使用本插件源码,建议完整重新编译一次自定义基座后再测试原生能力。
对外接口
插件入口:
import {
hasOverlayPermission,
openOverlayPermissionPage,
showFloatingWindow,
updateFloatingWindow,
hideFloatingWindow,
isFloatingWindowShowing,
getFloatingWindowState,
consumePendingRoute
} from '@/uni_modules/zf-floating-window'
hasOverlayPermission()
检查当前是否已经获得系统悬浮窗权限。
const granted = hasOverlayPermission()
openOverlayPermissionPage()
打开系统悬浮窗授权页。
openOverlayPermissionPage()
showFloatingWindow(options)
显示悬浮窗。
updateFloatingWindow(options)
更新已显示悬浮窗的配置。
hideFloatingWindow()
隐藏悬浮窗。
isFloatingWindowShowing()
查询悬浮窗当前是否显示。
getFloatingWindowState()
同时获取权限状态与显示状态。
consumePendingRoute()
消费一次由悬浮窗点击后回传的待跳转页面信息。
FloatingWindowOptions
type FloatingWindowOptions = {
routePath?: string
openType?: string
mode?: string
label?: string
x?: number
y?: number
size?: number
width?: number
height?: number
textColor?: string
backgroundColor?: string
htmlContent?: string
htmlUrl?: string
draggable?: boolean
autoSnapToEdge?: boolean
}
字段说明:
routePath:点击悬浮窗后要打开的页面路径openType:页面打开方式,可选navigateTo/redirectTo/reLaunch/switchTabmode:悬浮窗模式,可选native/webviewlabel:标题或按钮文案x/y:初始显示位置,单位近似 dpsize:原生按钮模式下的尺寸width/height:WebView 模式下的宽高textColor:文本颜色backgroundColor:背景色htmlContent:直接传入 HTML 字符串htmlUrl:WebView 直接加载的地址,优先级高于htmlContentdraggable:是否允许拖动autoSnapToEdge:松手后是否自动吸边
原生按钮模式示例
showFloatingWindow({
routePath: '/pages/overlay-target/overlay-target?from=overlay&scene=blue',
openType: 'navigateTo',
mode: 'native',
label: '悬浮',
x: 24,
y: 180,
size: 76,
textColor: '#FFF8E7',
backgroundColor: '#1F3A5F',
draggable: true,
autoSnapToEdge: true
})
WebView / HTML 悬浮窗示例
showFloatingWindow({
routePath: '/pages/overlay-target/overlay-target?from=overlay&scene=webview',
openType: 'navigateTo',
mode: 'webview',
label: 'HTML窗',
x: 20,
y: 120,
width: 260,
height: 300,
textColor: '#FFF8E7',
backgroundColor: '#1F3A5F',
htmlContent: '<html><body><h3>自定义 HTML</h3><p>这里是悬浮内容</p></body></html>',
draggable: true,
autoSnapToEdge: true
})
如果你希望直接加载网页:
showFloatingWindow({
routePath: '/pages/overlay-target/overlay-target?from=overlay&scene=url',
openType: 'navigateTo',
mode: 'webview',
label: '网页窗',
x: 16,
y: 100,
width: 300,
height: 360,
htmlUrl: 'https://example.com',
draggable: true,
autoSnapToEdge: true
})
视频悬浮按钮示例
如果你要做悬浮视频按钮,可以把一个视频控制 HTML 塞进 htmlContent,例如:
showFloatingWindow({
routePath: '/pages/overlay-target/overlay-target?from=overlay&scene=video',
openType: 'navigateTo',
mode: 'webview',
label: '视频悬浮',
x: 16,
y: 110,
width: 280,
height: 356,
textColor: '#FFF8E7',
backgroundColor: '#17304C',
htmlContent: '<html>...</html>',
draggable: true,
autoSnapToEdge: true
})
你也可以在 HTML 中接入如下视频地址:
https://play.hhuus.com/play/dNkL6BKe/index.m3u8
如果 WebView 对 m3u8 原生支持不足,可在 HTML 中引入 hls.js。
点击悬浮窗跳转指定页面
推荐做法:
- 悬浮窗点击后由原生层回到应用
- 原生层缓存待跳转路由
- 应用前台页面在
onShow中消费待跳转路由并执行页面跳转
本插件已经提供 consumePendingRoute() 用于消费这类信息。
demo 页面说明
当前 demo 页面中包含以下演示入口:
- 检查权限
- 前往授权
- 显示悬浮窗
- 更新悬浮窗
- 视频悬浮
- 隐藏悬浮窗
其中:
- 第一组预设为 WebView / HTML 悬浮窗演示
- “视频悬浮”按钮演示 WebView 视频悬浮窗的用法
使用建议
- 涉及原生
Service、Activity、AndroidManifest.xml变更时,建议完整重建自定义基座 - WebView 模式下如需加载外链资源,请确认设备网络可访问
- m3u8 视频建议真机验证
- 上架生产环境前,请自行检查 ROM 兼容性和权限引导文案
已知限制
- 当前主要面向
uni-app App-Android uni-app x、nvue、iOS、Harmony暂未完整验证- WebView 模式内容复杂时,拖动区域建议限制在标题栏,不要直接覆盖整个网页内容区
更新建议
你可以继续扩展:
- 悬浮窗关闭按钮
- 多悬浮入口
- 悬浮视频最小化/展开切换
- WebView 与页面 JS 通信
- 指定业务页面参数跳转

收藏人数:
https://ext.dcloud.net.cn/plugin?id=zf-floating-window
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 2637
赞赏 58
下载 11833579
赞赏 1911
赞赏
京公网安备:11010802035340号