前言
為了增加應用程序功能的豐富性和便利性,很多應用都會提供一個懸浮窗口實現(xiàn)多頁面顯示。特別是一些性能檢測工具,比如 dokit 。在鴻蒙上怎么實現(xiàn)類似的全局懸浮窗口呢?閱讀完本篇文章你將學會在鴻蒙上如何實現(xiàn)這一功能。
實現(xiàn)效果
需求分析
要想實現(xiàn)全局懸浮窗口,必須滿足以下幾個要求:
- 窗口可以懸浮在任意頁面。
- 窗口可以跟隨手勢拖動。
- 邊界處理。
技術實現(xiàn)
在 ArkUI 中,頁面只有 Window 和 View 兩種組成。View 通常都是顯示在 Window 中,如果要想實現(xiàn)一個可以在任意頁面都能停留顯示的懸浮窗,只能通過 window 來實現(xiàn)。
- 通過 windowState 調用 createSubWIndow 來創(chuàng)建一個子 Window。
this.windowState.createSubWindow("subWindow", (err: BusinessError, window) = > {
})
- 對于 windowState 的獲取,一般都在 EntryAbility 中的 onWindowStateCreate 中提供,如果不想通過傳遞參數(shù)的方式獲取 windowStage,系統(tǒng)也提供了工具類可以在任意地方獲取。
//存儲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 不僅能實現(xiàn)全局懸浮窗,還可以實現(xiàn)自定義彈窗,Poupwindow,toast 等一系列彈窗。使用 window 的好處在于可以徹底和當前頁面分離,不依賴頁面存在??梢詫崿F(xiàn)在任意地方彈窗??靹邮衷囋嚢?!
-
Window
+關注
關注
0文章
84瀏覽量
37944 -
鴻蒙
+關注
關注
60文章
2766瀏覽量
45179 -
HarmonyOS
+關注
關注
80文章
2144瀏覽量
35319
發(fā)布評論請先 登錄
霍爾元件在磁懸浮技術上的應用與解析
【RA-Eco-RA6M4開發(fā)板評測】實現(xiàn)任意存儲地址內容的打印與修改
無軸承永磁電機懸浮波動抑制策略
【HarmonyOS next】ArkUI-X休閑益智兒童拼圖【進階】
HarmonyOS實戰(zhàn):Tab頂部滑動懸停功能實現(xiàn)
HarmonyOS實戰(zhàn): 城市選擇功能的快速實現(xiàn)
HarmonyOS實戰(zhàn):3秒實現(xiàn)一個自定義輪播圖
HarmonyOS實戰(zhàn):快速實現(xiàn)一個上下滾動的廣告控件
【HarmonyOS 5】桌面快捷方式功能實現(xiàn)詳解
HarmonyOS實戰(zhàn):組件化項目搭建
【RA-Eco-RA4M2開發(fā)板評測】使用RA4M2的串口實現(xiàn)任意任意類型任意長度的數(shù)據(jù)接收,并將接收到的數(shù)據(jù)顯示在串口助手上
電機及電力拖動基礎
安泰:高壓放大器在金屬材料的靜電懸浮過程中的應用
高壓放大器在位置控制系統(tǒng)懸浮實驗中的應用

HarmonyOS實戰(zhàn):實現(xiàn)任意拖動的應用懸浮窗口
評論