前言
为了增加应用程序功能的丰富性和便利性,很多应用都会提供一个悬浮窗口实现多页面显示。特别是一些性能检测工具,比如 dokit 。在鸿蒙上怎么实现类似的全局悬浮窗口呢?阅读完本篇文章你将学会在鸿蒙上如何实现这一功能。
实现效果
需求分析
要想实现全局悬浮窗口,必须满足以下几个要求:
- 窗口可以悬浮在任意页面。
- 窗口可以跟随手势拖动。
- 边界处理。
技术实现
在 ArkUI 中,页面只有 Window 和 View 两种组成。View 通常都是显示在 Window 中,如果要想实现一个可以在任意页面都能停留显示的悬浮窗,只能通过 window 来实现。
- 通过 windowState 调用 createSubWIndow 来创建一个子 Window。
this.windowState.createSubWindow("subWindow", (err: BusinessError, window) = > {
})
- 对于 windowState 的获取,一般都在 EntryAbility 中的 onWindowStateCreate 中提供,如果不想通过传递参数的方式获取 windowStage,系统也提供了工具类可以在任意地方获取。
//存储windowStage
WindowManager.setWindowStage(windowStage);
//获取windowstage
this.windowState = WindowManager.getWindowStage()
- 初始化 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的初始位置
- 手势移动,通过调研 PanGesture()的 onActionUpdate 方法不断更新 window 的位置。
.gesture(GestureGroup(
GestureMode.Exclusive,
PanGesture().onActionUpdate((event)= >{
this.currentWindow?.moveWindowTo(event.offsetX,event.offsetY)
})
))
- 边界处理,计算最小移动范围和最大移动范围。确保 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)
- 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
发布评论请先 登录
相关推荐
热点推荐
霍尔元件在磁悬浮技术上的应用与解析
。例如在磁悬浮摆件中,两个线性霍尔元件以垂直交叉布局实现三维空间定位。
.闭环调节系统
霍尔信号经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
【HarmonyOS next】ArkUI-X休闲益智儿童拼图【进阶】
版本:ArkUI API 16
? 代码仓库地址:gitee
三、核心实现解析
3.1 拖动逻辑的三维坐标系
在拼图游戏中,精准的位置计算是灵魂所在。我们通过PanGesture手势监听实现
发表于 06-28 21:41
HarmonyOS实战:Tab顶部滑动悬停功能实现
日常开发过程中,遇到这种 Scroll 嵌套 List 列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现 Tab 顶部悬停的效果,建议点赞收藏!
HarmonyOS实战: 城市选择功能的快速实现
最近在日常开发过程中,需要实现城市选择功能,同时支持模糊搜索。看似简单的功能动手实现起来却有很多难点。本篇文章详细记录开发过程中遇到的问题和对应的解决方法,希望能够帮助你,建议点赞收藏!
HarmonyOS实战:3秒实现一个自定义轮播图
那么简单,需要考虑的细节很多。不过在 HarmonyOS 中实现一个轮播图却是十分的简单,本篇文章教你在最短的时间内快速实现一个自定义的 轮播图,建议点赞收藏!
HarmonyOS实战:快速实现一个上下滚动的广告控件
上要想实现这样的功能并不容易,那么在鸿蒙上怎么实现这样的功能呢?本篇文章教你使用最简单的方式实现一个支持上下滚动的广告控件,建议点赞收藏!
【HarmonyOS 5】桌面快捷方式功能实现详解
【HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 在移动应用开发中,如何让用户快速触达核心
HarmonyOS实战:组件化项目搭建
?本文将详细讲解HarmonyOs组件化项目搭建的全过程,带领大家实现一个组件化项目。 项目创建 首先创建一个项目工程,点击开发工具DevEco-Stdio的****File 选项,选择 New 然后点击 Create Project 。 选择创建一个EmptyAbili
【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

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