前言
為了增加應(yīng)用程序功能的豐富性和便利性,很多應(yīng)用都會(huì)提供一個(gè)懸浮窗口實(shí)現(xiàn)多頁面顯示。特別是一些性能檢測(cè)工具,比如 dokit 。在鴻蒙上怎么實(shí)現(xiàn)類似的全局懸浮窗口呢?閱讀完本篇文章你將學(xué)會(huì)在鴻蒙上如何實(shí)現(xiàn)這一功能。
實(shí)現(xiàn)效果
需求分析
要想實(shí)現(xiàn)全局懸浮窗口,必須滿足以下幾個(gè)要求:
- 窗口可以懸浮在任意頁面。
- 窗口可以跟隨手勢(shì)拖動(dòng)。
- 邊界處理。
技術(shù)實(shí)現(xiàn)
在 ArkUI 中,頁面只有 Window 和 View 兩種組成。View 通常都是顯示在 Window 中,如果要想實(shí)現(xiàn)一個(gè)可以在任意頁面都能停留顯示的懸浮窗,只能通過 window 來實(shí)現(xiàn)。
- 通過 windowState 調(diào)用 createSubWIndow 來創(chuàng)建一個(gè)子 Window。
this.windowState.createSubWindow("subWindow", (err: BusinessError, window) = > {
})
- 對(duì)于 windowState 的獲取,一般都在 EntryAbility 中的 onWindowStateCreate 中提供,如果不想通過傳遞參數(shù)的方式獲取 windowStage,系統(tǒng)也提供了工具類可以在任意地方獲取。
//存儲(chǔ)windowStage
WindowManager.setWindowStage(windowStage);
//獲取windowstage
this.windowState = WindowManager.getWindowStage()
- 初始化 Window。url 為 window 頁面的路徑。
window.setWindowLayoutFullScreen(false) //設(shè)置window是否全屏顯示
window.setUIContent(url, (error) = > {
window.showWindow((error) = > {
window.setWindowBackgroundColor("#00000000") //設(shè)置window背景色
})
})
window.resize(this.size, this.size)//設(shè)置window大小
window.moveWindowTo(this.locationX, this.locationY) //設(shè)置window的初始位置
- 手勢(shì)移動(dòng),通過調(diào)研 PanGesture()的 onActionUpdate 方法不斷更新 window 的位置。
.gesture(GestureGroup(
GestureMode.Exclusive,
PanGesture().onActionUpdate((event)= >{
this.currentWindow?.moveWindowTo(event.offsetX,event.offsetY)
})
))
- 邊界處理,計(jì)算最小移動(dòng)范圍和最大移動(dòng)范圍。確保 window 不會(huì)移出當(dāng)前頁面。
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 銷毀。當(dāng)退出應(yīng)用時(shí),需要將 window 關(guān)閉,調(diào)用 window 的 destroyWindow 方法銷毀 window。
this.contentWindow.destroyWindow(() = > {
this.contentWindow = undefined
})
總結(jié)
通過 window 不僅能實(shí)現(xiàn)全局懸浮窗,還可以實(shí)現(xiàn)自定義彈窗,Poupwindow,toast 等一系列彈窗。使用 window 的好處在于可以徹底和當(dāng)前頁面分離,不依賴頁面存在。可以實(shí)現(xiàn)在任意地方彈窗。快動(dòng)手試試吧!
-
Window
+關(guān)注
關(guān)注
0文章
83瀏覽量
37546 -
鴻蒙
+關(guān)注
關(guān)注
59文章
2566瀏覽量
43878 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2130瀏覽量
32461
發(fā)布評(píng)論請(qǐng)先 登錄
HarmonyOS實(shí)戰(zhàn):Tab頂部滑動(dòng)懸停功能實(shí)現(xiàn)
HarmonyOS實(shí)戰(zhàn): 城市選擇功能的快速實(shí)現(xiàn)
HarmonyOS實(shí)戰(zhàn):3秒實(shí)現(xiàn)一個(gè)自定義輪播圖
HarmonyOS實(shí)戰(zhàn):快速實(shí)現(xiàn)一個(gè)上下滾動(dòng)的廣告控件
【HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解

HarmonyOS實(shí)戰(zhàn):組件化項(xiàng)目搭建

【RA-Eco-RA4M2開發(fā)板評(píng)測(cè)】使用RA4M2的串口實(shí)現(xiàn)任意任意類型任意長(zhǎng)度的數(shù)據(jù)接收,并將接收到的數(shù)據(jù)顯示在串口助手上
如何用泰克AFG31000信號(hào)發(fā)生器生成高精度任意波形

電機(jī)及電力拖動(dòng)基礎(chǔ)
名單公布!【書籍評(píng)測(cè)活動(dòng)NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐
安泰:高壓放大器在金屬材料的靜電懸浮過程中的應(yīng)用

高壓放大器在位置控制系統(tǒng)懸浮實(shí)驗(yàn)中的應(yīng)用

評(píng)論