0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS实战:实现任意拖动的应用悬浮窗口

尤枫 来源:jf_54996641 2025-06-24 17:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

为了增加应用程序功能的丰富性和便利性,很多应用都会提供一个悬浮窗口实现多页面显示。特别是一些性能检测工具,比如 dokit 。在鸿蒙上怎么实现类似的全局悬浮窗口呢?阅读完本篇文章你将学会在鸿蒙上如何实现这一功能。

实现效果

需求分析

要想实现全局悬浮窗口,必须满足以下几个要求:

  1. 窗口可以悬浮在任意页面。
  2. 窗口可以跟随手势拖动。
  3. 边界处理。

技术实现

在 ArkUI 中,页面只有 Window 和 View 两种组成。View 通常都是显示在 Window 中,如果要想实现一个可以在任意页面都能停留显示的悬浮窗,只能通过 window 来实现。

  1. 通过 windowState 调用 createSubWIndow 来创建一个子 Window。
this.windowState.createSubWindow("subWindow", (err: BusinessError, window) = > {
     

    })
  1. 对于 windowState 的获取,一般都在 EntryAbility 中的 onWindowStateCreate 中提供,如果不想通过传递参数的方式获取 windowStage,系统也提供了工具类可以在任意地方获取。
//存储windowStage
WindowManager.setWindowStage(windowStage);
//获取windowstage
 this.windowState = WindowManager.getWindowStage()
  1. 初始化 Window。url 为 window 页面的路径。
window.setWindowLayoutFullScreen(false) //设置window是否全屏显示
      window.setUIContent(url, (error) = > {
        window.showWindow((error) = > {
          window.setWindowBackgroundColor("#00000000") //设置window背景色
        })

      })

      window.resize(this.size, this.size)//设置window大小
      window.moveWindowTo(this.locationX, this.locationY) //设置window的初始位置
  1. 手势移动,通过调研 PanGesture()的 onActionUpdate 方法不断更新 window 的位置。
.gesture(GestureGroup(
      GestureMode.Exclusive,
      PanGesture().onActionUpdate((event)= >{
        this.currentWindow?.moveWindowTo(event.offsetX,event.offsetY)
      })
    ))
  1. 边界处理,计算最小移动范围和最大移动范围。确保 window 不会移出当前页面。
this.locationX = Math.min(Math.max(this.locationX + x, this.minX), this.maxX)
 this.locationY = Math.min(Math.max(this.locationY + y, this.minY), this.maxY)
  1. window 销毁。当退出应用时,需要将 window 关闭,调用 window 的 destroyWindow 方法销毁 window。
this.contentWindow.destroyWindow(() = > {
        this.contentWindow = undefined
      })

总结

通过 window 不仅能实现全局悬浮窗,还可以实现自定义弹窗,Poupwindow,toast 等一系列弹窗。使用 window 的好处在于可以彻底和当前页面分离,不依赖页面存在。可以实现在任意地方弹窗。快动手试试吧!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Window
    +关注

    关注

    0

    文章

    96

    浏览量

    37974
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45347
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35568
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【Labview技巧合集】10 实现窗口悬浮和停靠

    【Labview技巧合集】10 实现窗口悬浮和停靠
    发表于 08-27 17:39

    霍尔元件在磁悬浮技术上的应用与解析

    。例如在磁悬浮摆件中,两个线性霍尔元件以垂直交叉布局实现三维空间定位。 .‌闭环调节系统‌ 霍尔信号经PID算法处理后驱动电磁铁电流调整,实现悬浮体的动态平衡。调试参数时需重点调节比例
    发表于 08-07 10:40

    【RA-Eco-RA6M4开发板评测】实现任意存储地址内容的打印与修改

    代码 一. 前言 前面我们实现了shell命令行,现在就可以方便的添加 自定义命令了。 为了方便调试我们来实现任意存储地址的内容打印与修改的功能。这样可以实现任意外设寄存器的查看与配置,片内存
    发表于 07-19 23:20

    无轴承永磁电机悬浮波动抑制策略

    。将等效扰动电流补偿到县浮控制算法中以抑制悬浮波动。与仅采用PID控制算法相比较,仿真结果表明所提控制策略能够抑制悬浮波动,实现电机稳定悬浮。 纯分享帖,点击下方附件免费获取完整资
    发表于 07-14 17:51

    HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能

    HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 图(1-1
    的头像 发表于 07-11 18:16 869次阅读
    【<b class='flag-5'>HarmonyOS</b> 5】鸿蒙应用<b class='flag-5'>实现</b>发票扫描、文档扫描输出PDF图片或者表格的功能

    HarmonyOS next】ArkUI-X休闲益智儿童拼图【进阶】

    版本:ArkUI API 16 ? 代码仓库地址:gitee 三、核心实现解析 3.1 拖动逻辑的三维坐标系 在拼图游戏中,精准的位置计算是灵魂所在。我们通过PanGesture手势监听实现
    发表于 06-28 21:41

    HarmonyOS实战:Tab顶部滑动悬停功能实现

    日常开发过程中,遇到这种 Scroll 嵌套 List 列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现 Tab 顶部悬停的效果,建议点赞收藏!
    的头像 发表于 06-24 17:07 286次阅读

    HarmonyOS实战: 城市选择功能的快速实现

    最近在日常开发过程中,需要实现城市选择功能,同时支持模糊搜索。看似简单的功能动手实现起来却有很多难点。本篇文章详细记录开发过程中遇到的问题和对应的解决方法,希望能够帮助你,建议点赞收藏!
    的头像 发表于 06-24 17:07 342次阅读

    HarmonyOS实战:3秒实现一个自定义轮播图

    那么简单,需要考虑的细节很多。不过在 HarmonyOS实现一个轮播图却是十分的简单,本篇文章教你在最短的时间内快速实现一个自定义的 轮播图,建议点赞收藏!
    的头像 发表于 06-24 17:06 391次阅读

    HarmonyOS实战:快速实现一个上下滚动的广告控件

    上要想实现这样的功能并不容易,那么在鸿蒙上怎么实现这样的功能呢?本篇文章教你使用最简单的方式实现一个支持上下滚动的广告控件,建议点赞收藏!
    的头像 发表于 06-24 17:05 370次阅读

    HarmonyOS 5】桌面快捷方式功能实现详解

    HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 在移动应用开发中,如何让用户快速触达核心
    的头像 发表于 06-21 16:42 1783次阅读
    【<b class='flag-5'>HarmonyOS</b> 5】桌面快捷方式功能<b class='flag-5'>实现</b>详解

    HarmonyOS实战:组件化项目搭建

    ?本文将详细讲解HarmonyOs组件化项目搭建的全过程,带领大家实现一个组件化项目。 项目创建 首先创建一个项目工程,点击开发工具DevEco-Stdio的****File 选项,选择 New 然后点击 Create Project 。 选择创建一个EmptyAbili
    的头像 发表于 06-09 14:58 515次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>实战</b>:组件化项目搭建

    【RA-Eco-RA4M2开发板评测】使用RA4M2的串口实现任意任意类型任意长度的数据接收,并将接收到的数据显示在串口助手上

    使用RA4M2的串口实现任意任意类型任意长度的数据接收,并将接收到的任意类型任意长度的数据显示在串口助手上 使用RA4M2的串口
    发表于 05-04 14:11

    电机及电力拖动基础

    “电机及电力拖动基础”是工业电气自动化专业的重要专业基础课之一,在整个专业教学计划中起承上启下的作用,它是“数学”、“物理学”和“电路与磁路”的后续课程,又是“控制理论”、“电力拖动自动控制系统
    发表于 04-08 16:11

    名单公布!【书籍评测活动NO.56】极速探索HarmonyOS NEXT:纯血鸿蒙应用开发实践

    本书深入剖析了HarmonyOS NEXT的各项技术,通过丰富的实战案例,由浅入深地解析了HarmonyOS NEXT的原理与应用。借助多样化的实战案例和丰富的配套资源,读者可以全面
    发表于 01-20 16:53