更新记录

1.0.0(2026-06-18)

  • 首版发布 lizhao-float-window 纯 UTS 悬浮窗与画中画 API 插件。
  • Android 支持全局悬浮窗 overlay 与应用内悬浮窗 inApp
  • Android 支持 WebView 自定义内容,可加载远程 URL 与本地 HTML。
  • Android 支持拖拽、显示/隐藏、置顶、关闭、坐标查询、坐标设置、预设尺寸和自定义尺寸。
  • Android 支持视频流场景进入画中画,非视频内容会返回明确错误。
  • Android 支持悬浮窗权限检查、权限设置页引导、运行态快照和诊断报告。
  • iOS 支持应用内轻量浮窗和最佳努力 PiP,并明确不支持跨应用全局悬浮。
  • iOS 首发已内置 FloatWindowIosViewBridge 兼容处理,收口 CGFloat 坐标读取、可空 UIKit 挂载/置顶和 ?uts-proxy 导出声明问题。
  • Harmony、Web、微信小程序、支付宝小程序提供能力矩阵与统一错误语义。
  • 提供标准 API 与常用兼容别名:open / close / show / hide / setPosition / getPosition / setContent / setDragEnable / toFront
  • 监听 API 支持不传 options 进行清理,避免客户在页面卸载时因省略参数触发桥接空参数异常。
  • 补充从简单到复杂的 README 接入文档,覆盖最小示例、常见增强、API 表、参数表、平台边界、权限与自定义基座说明。

平台兼容性

uni-app(4.84)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

uni-app x(4.84)

Chrome Safari Android iOS 鸿蒙 微信小程序

lizhao-float-window

lizhao-float-window 是一个面向 uni-app / uni-app x 的纯 UTS 悬浮窗与画中画 API 插件。它把 Android 全局悬浮窗、应用内悬浮窗、WebView 自定义内容、拖拽、大小切换、坐标管理和视频画中画入口封装成统一 API,适合直播小窗、客服浮窗、工具面板、业务公告、悬浮按钮和本地 HTML 面板等场景。

功能特色

  • Android 支持全局悬浮窗与应用内悬浮窗,可加载远程 URL 或本地 HTML。
  • 支持拖拽、显示/隐藏、置顶、关闭、坐标查询、坐标设置和大小切换。
  • 支持 small / medium / large / custom 四类尺寸方案,便于从悬浮球扩展到内容卡片。
  • 支持视频流场景进入 Android 画中画模式,普通内容会返回明确错误,避免伪成功。
  • 支持 Android 悬浮窗权限检查、权限设置页引导、运行状态查询和诊断报告,便于客户接入和售后定位。
  • iOS 提供应用内轻量浮窗与最佳努力 PiP 能力,并明确说明系统不支持跨应用全局悬浮。
  • Harmony、Web、微信小程序、支付宝小程序提供能力矩阵和统一错误语义,方便业务做多端兜底。

适用场景

场景 推荐能力 说明
直播/视频小窗 openFloatWindow + enterPictureInPicture 先用悬浮窗承载页面或播放入口,视频流需要时再进入 PiP。
客服/营销浮窗 openFloatWindow + setFloatWindowContent 使用远程 URL 或本地 HTML 展示可运营内容。
工具面板 inApp 模式 + setFloatWindowSizePreset 应用内悬浮,不要求 Android 系统悬浮窗权限。
悬浮球入口 smallcustom 小尺寸 首版可用小尺寸 WebView 承载图标页,后续版本会增强原生悬浮球。
多端统一接入 getCapabilities 先读取能力矩阵,再决定是否展示入口或走降级逻辑。

接入前先看

项目 说明
插件类型 UTS API 插件
推荐导入路径 @/uni_modules/lizhao-float-window
Android 全局悬浮 支持,需要 SYSTEM_ALERT_WINDOW 权限和自定义基座
Android 应用内悬浮 支持,不需要系统悬浮窗权限
Android 内容承载 WebView,支持 URL 与本地 HTML
Android PiP 支持 Android 8.0 及以上视频流场景
iOS 全局悬浮 不支持,系统限制
iOS 应用内悬浮 支持轻量浮窗
Harmony/Web/小程序 首版提供能力矩阵和明确不支持错误

最小可运行示例

1. 读取能力矩阵

import { getCapabilities } from '@/uni_modules/lizhao-float-window'

// 先读取平台能力,业务可据此决定是否展示悬浮窗入口。
getCapabilities({
  success(res) {
    console.log('悬浮窗能力矩阵', res)
  },
  fail(err) {
    console.log('读取能力失败', err)
  }
})

2. 打开 Android 全局悬浮窗

import { openFloatWindow } from '@/uni_modules/lizhao-float-window'

// overlay 是 Android 全局悬浮窗模式,需要系统悬浮窗权限。
openFloatWindow({
  mode: 'overlay',
  content: {
    type: 'url',
    value: 'https://www.dcloud.io',
    isVideoStream: false
  },
  sizePreset: 'medium',
  dragEnabled: true,
  success(res) {
    console.log('打开全局悬浮窗成功', res)
  },
  fail(err) {
    console.log('打开全局悬浮窗失败', err)
  }
})

3. 打开应用内悬浮窗

import { open } from '@/uni_modules/lizhao-float-window'

// inApp 是应用内悬浮模式,适合工具面板、活动提示、客服入口等场景。
open({
  mode: 'inApp',
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html',
    isVideoStream: false
  },
  size: {
    width: 360,
    height: 220
  },
  dragEnabled: true,
  success(res) {
    console.log('打开应用内悬浮窗成功', res)
  },
  fail(err) {
    console.log('打开应用内悬浮窗失败', err)
  }
})

常见增强示例

切换浮窗大小

import { setFloatWindowSizePreset, setFloatWindowSize } from '@/uni_modules/lizhao-float-window'

// 使用预设尺寸快速切换为大窗。
setFloatWindowSizePreset({
  preset: 'large',
  success(res) {
    console.log('切换为 large 成功', res)
  }
})

// 使用 custom 尺寸适配自己的业务面板。
setFloatWindowSize({
  size: {
    width: 300,
    height: 180
  },
  success(res) {
    console.log('切换自定义尺寸成功', res)
  }
})

移动与查询位置

import { setPosition, getPosition } from '@/uni_modules/lizhao-float-window'

// 将悬浮窗移动到左上方业务安全区域。
setPosition({
  position: {
    x: 20,
    y: 120
  },
  success(res) {
    console.log('移动悬浮窗成功', res)
  }
})

// 查询当前位置,适合保存用户拖拽后的坐标。
getPosition({
  success(res) {
    console.log('当前悬浮窗坐标', res)
  }
})

监听拖拽与点击

import { onMove, onClick, offMove, offClick } from '@/uni_modules/lizhao-float-window'

// 监听拖拽坐标,业务可用于位置记忆或吸附逻辑。
onMove({
  listener(event) {
    console.log('悬浮窗移动', event.x, event.y)
  }
})

// 监听悬浮窗点击,适合打开业务页或展开面板。
onClick({
  listener(event) {
    console.log('悬浮窗点击', event)
  }
})

// 页面卸载时建议主动取消监听。
offMove({})
offClick({})

动态切换内容

import { setContent } from '@/uni_modules/lizhao-float-window'

// 将悬浮窗内容切换为本地 HTML。
setContent({
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html',
    isVideoStream: false
  },
  success(res) {
    console.log('切换本地内容成功', res)
  }
})

视频流进入画中画

import { enterPictureInPicture, exitPictureInPicture } from '@/uni_modules/lizhao-float-window'

// PiP 只面向视频流场景,普通网页内容会返回明确错误。
enterPictureInPicture({
  content: {
    type: 'url',
    value: 'https://example.com/live.m3u8',
    isVideoStream: true
  },
  success(res) {
    console.log('进入画中画成功', res)
  },
  fail(err) {
    console.log('进入画中画失败', err)
  }
})

// 需要恢复主应用时调用退出逻辑。
exitPictureInPicture({
  success(res) {
    console.log('退出画中画成功', res)
  }
})

权限与诊断

import {
  checkOverlayPermission,
  openOverlayPermissionSettings,
  getFloatWindowState,
  getFloatWindowDiagnostics
} from '@/uni_modules/lizhao-float-window'

// Android 全局悬浮前建议先检查权限,未授权时再引导用户打开设置页。
checkOverlayPermission({
  success(res) {
    console.log('悬浮窗权限状态', res)
    if (res.requiresOverlayPermission && !res.granted && res.canOpenSettings) {
      openOverlayPermissionSettings({})
    }
  }
})

// 查询当前运行态,适合保存位置或判断是否需要重复打开。
getFloatWindowState({
  success(res) {
    console.log('悬浮窗运行状态', res)
  }
})

// 导出诊断报告,适合售后排查权限、WebView、窗口附着和监听器状态。
getFloatWindowDiagnostics({
  success(res) {
    console.log('悬浮窗诊断报告', res)
  }
})

完整示例

示例 路径 说明
演示页面 pages/floatWindow/floatWindow.vue 覆盖全局悬浮、应用内悬浮、尺寸切换、拖拽、内容切换和 PiP。
本地 HTML 内容 static/float-window-demo.html 用于演示 localAsset 内容加载。

API 列表

API 说明
getCapabilities(options) 获取当前平台能力矩阵。
openFloatWindow(options) / open(options) 打开悬浮窗。
updateFloatWindow(options) / setConfig(options) 更新悬浮窗配置。
closeFloatWindow(options) / close(options) 关闭悬浮窗。
showFloatWindow(options) / show(options) 显示悬浮窗。
hideFloatWindow(options) / hide(options) 隐藏悬浮窗。
bringFloatWindowToFront(options) / toFront(options) 将悬浮窗置顶。
setFloatWindowPosition(options) / setPosition(options) 设置悬浮窗坐标。
getFloatWindowPosition(options) / getPosition(options) 查询悬浮窗坐标。
setFloatWindowSize(options) / setSize(options) 设置自定义尺寸。
setFloatWindowSizePreset(options) 设置预设尺寸。
setFloatWindowDragEnabled(options) / setDragEnable(options) 开启或关闭拖拽。
setFloatWindowContent(options) / setContent(options) 更新悬浮窗内容。
enterPictureInPicture(options) 进入画中画。
exitPictureInPicture(options) 退出画中画。
checkOverlayPermission(options) 检查 Android 系统悬浮窗权限。
openOverlayPermissionSettings(options) 打开 Android 系统悬浮窗权限设置页。
getFloatWindowState(options) 获取当前悬浮窗运行态快照。
getFloatWindowDiagnostics(options) 获取权限、窗口、WebView 和监听器诊断报告。
onMove(options) / offMove(options) 订阅/取消拖拽事件。
onClick(options) / offClick(options) 订阅/取消点击事件。
onContentEvent(options) / offContentEvent(options) 订阅/取消内容事件。

openFloatWindow(options)

说明 打开悬浮窗。Android 可使用 overlay 全局悬浮或 inApp 应用内悬浮;iOS 仅支持 inApp 和最佳努力 PiP。

支持平台 Android / iOS

参数

参数 类型 必填 说明 默认值 可选参数
options OpenFloatWindowOptions 打开悬浮窗参数对象 mode / content / position / size / sizePreset / dragEnabled / visible / success / fail / complete
options.mode FloatWindowMode 悬浮窗模式 Android 默认 overlay,iOS 默认 inApp inApp / overlay / pip
options.content FloatWindowContent 悬浮窗内容 type / value / isVideoStream / bridgeName / userAgentSuffix
options.position FloatWindowPosition 初始坐标 Android { x: 72, y: 180 },iOS { x: 24, y: 120 } x / y
options.size FloatWindowSize 自定义尺寸 width / height
options.sizePreset FloatWindowSizePreset 尺寸预设 medium small / medium / large / custom
options.dragEnabled boolean 是否允许拖拽 true true / false
options.visible boolean 打开后是否立即显示 true true / false
options.success function 打开成功回调
options.fail function 打开失败回调
options.complete function 完成回调,成功或失败都会触发

返回值

字段 类型 说明
opened boolean 是否已打开
visible boolean 当前是否可见
mode FloatWindowMode 当前模式
dragEnabled boolean 是否允许拖拽
position FloatWindowPosition 当前坐标
size FloatWindowSize 当前尺寸
sizePreset FloatWindowSizePreset 当前尺寸预设
content FloatWindowContent | null 当前内容

getCapabilities(options)

说明 获取当前平台支持情况。建议业务在展示入口前先调用该 API。

参数

参数 类型 必填 说明 默认值 可选参数
options GetCapabilitiesOptions 能力查询回调对象 success / fail / complete
options.success function 查询成功回调
options.fail function 查询失败回调
options.complete function 完成回调

返回值

字段 类型 说明
supported boolean 当前平台是否可接入插件能力
platform string 当前平台名称
inApp boolean 是否支持应用内悬浮
overlay boolean 是否支持全局悬浮
pip boolean 是否支持画中画
draggable boolean 是否支持拖拽
resizable boolean 是否支持大小切换
webContent boolean 是否支持 Web 内容
localAssetContent boolean 是否支持本地 HTML 内容
requiresOverlayPermission boolean 是否需要系统悬浮窗权限
requiresCustomBase boolean 是否需要自定义基座
restrictedReason string 不支持或受限原因

checkOverlayPermission(options)

说明 检查 Android 系统悬浮窗权限。非 Android 平台会返回明确平台边界,业务可据此隐藏全局悬浮入口。

参数

参数 类型 必填 说明 默认值 可选参数
options CheckOverlayPermissionOptions 权限检查回调对象 success / fail / complete
options.success function 检查成功回调
options.fail function 检查失败回调
options.complete function 完成回调

返回值

字段 类型 说明
platform string 当前平台
granted boolean 是否已授权
requiresOverlayPermission boolean 是否需要系统悬浮窗权限
canOpenSettings boolean 是否可打开系统设置页
settingsUri string Android 设置页 URI
packageName string Android 应用包名
restrictedReason string 平台限制说明

getFloatWindowState(options)

说明 获取当前悬浮窗运行态快照,适合判断是否已打开、是否可见、当前尺寸和坐标。

参数

参数 类型 必填 说明 默认值 可选参数
options GetFloatWindowStateOptions 状态查询回调对象 success / fail / complete

返回值

字段 类型 说明
opened boolean 是否已打开
visible boolean 是否可见
mode FloatWindowMode 当前模式
dragEnabled boolean 是否允许拖拽
position FloatWindowPosition 当前坐标
size FloatWindowSize 当前尺寸
sizePreset FloatWindowSizePreset 当前尺寸预设
content FloatWindowContent | null 当前内容

getFloatWindowDiagnostics(options)

说明 获取运行诊断报告,便于客户接入、插件市场演示和售后排查。

参数

参数 类型 必填 说明 默认值 可选参数
options GetFloatWindowDiagnosticsOptions 诊断查询回调对象 success / fail / complete

返回值

字段 类型 说明
platform string 当前平台
state FloatWindowState 当前运行态快照
overlayPermission OverlayPermissionResult 悬浮窗权限状态
webViewReady boolean Android WebView 是否已创建
windowAttached boolean 原生窗口是否已附着
layoutReady boolean 原生布局参数是否已就绪
listenerStatus FloatWindowListenerStatus 拖拽、点击、内容事件监听状态
requiresCustomBase boolean 是否需要自定义基座
sdkInt number Android SDK 版本
restrictedReason string 平台限制说明

通用参数类型

FloatWindowContent

参数 类型 必填 说明 默认值 可选参数
type FloatWindowContentType 内容类型 url / localAsset
value string URL 地址或本地资源路径
isVideoStream boolean 是否为视频流内容,PiP 场景必须为 true false true / false
bridgeName string 预留桥接通道名
userAgentSuffix string Android WebView UA 后缀

FloatWindowPosition

参数 类型 必填 说明 默认值 可选参数
x number 屏幕横向坐标
y number 屏幕纵向坐标

FloatWindowSize

参数 类型 必填 说明 默认值 可选参数
width number 宽度,Android 最小会收敛到 120
height number 高度,Android 最小会收敛到 90

平台支持

平台 是否支持 说明
App-Android 支持全局悬浮、应用内悬浮、WebView 内容、拖拽、尺寸切换、位置管理和 PiP。
App-iOS 部分支持 支持应用内轻量浮窗和最佳努力 PiP,不支持跨应用全局悬浮。
App-Harmony 降级 首版返回能力矩阵和明确不支持错误。
Web 降级 首版返回能力矩阵和明确不支持错误。
微信小程序 降级 首版返回能力矩阵和明确不支持错误。
支付宝小程序 降级 首版返回能力矩阵和明确不支持错误。

错误码

错误码 含义 说明
9015001 unsupported 当前平台或能力暂不支持。
9015002 invalid params 参数为空、内容为空或参数不合法。
9015003 overlay permission denied Android 未授予系统悬浮窗权限。
9015004 not opened 悬浮窗尚未打开。
9015005 already opened 悬浮窗已经打开,重复打开前请先关闭。
9015006 mode restricted 当前平台不支持请求的模式,例如 iOS 请求全局悬浮。
9015007 pip content invalid PiP 内容不符合要求,通常是未声明视频流。
9015008 native failure 原生能力调用失败。
9015009 content load failed 内容加载失败。
9015010 listener missing 监听器缺失或不合法。

权限与自定义基座

Android

插件声明了以下权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
能力 是否需要自定义基座 说明
全局悬浮窗 overlay 需要 Android 原生悬浮窗权限和 UTS 原生逻辑。
应用内悬浮窗 inApp 不需要系统悬浮窗权限,但仍依赖 UTS 原生逻辑。
WebView 内容 使用 Android 原生 WebView。
PiP 使用 Android 原生画中画能力。

iOS

iOS 系统不允许普通应用创建跨应用全局悬浮窗。本插件首版提供应用内轻量浮窗和最佳努力 PiP,不承诺跨应用悬浮。

注意事项

  • Android 全局悬浮窗需要用户在系统设置中授权;未授权时会返回 9015003
  • PiP 只建议用于视频流场景,普通网页或业务卡片请使用悬浮窗模式。
  • 当前 Android 自定义内容使用 WebView 承载,适合远程运营页和本地 HTML;后续版本计划补充原生悬浮球和 JSBridge 增强。
  • iOS 受系统策略限制,不支持跨应用全局悬浮,发布说明中请勿承诺该能力。
  • Harmony/Web/小程序首版以能力矩阵和明确错误为主,业务应先调用 getCapabilities 做入口控制。

版本规划

版本 规划
1.0.0 首版发布:Android 全局/应用内悬浮、WebView 内容、拖拽、尺寸切换、位置管理、显隐控制、PiP 入口、权限与诊断 API、iOS 应用内轻量浮窗、多端能力矩阵,并已收口 iOS 云打包兼容处理。
后续版本 增强 JSBridge、悬浮球模式、边缘吸附、坐标记忆、原生内容模板、诊断报告归档和更完整的发布守卫。

作者系列UTS插件

以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。

插件 能力方向 插件市场
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 悬浮窗权限(SYSTEM_ALERT_WINDOW)与网络权限(INTERNET);iOS 受系统策略约束

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。