前言
為了增加應用程序功能的豐富性和便利性,很多應用都會提供一個懸浮窗口實現多頁面顯示。特別是一些性能檢測工具,比如 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文章
83瀏覽量
37568 -
鴻蒙
+關注
關注
59文章
2587瀏覽量
43924 -
HarmonyOS
+關注
關注
80文章
2143瀏覽量
32639
發布評論請先 登錄
相關推薦
熱點推薦
【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
安泰:高壓放大器在金屬材料的靜電懸浮過程中的應用
實驗名稱:靜電懸浮過程的優化設計與動態控制 實驗目的: 通過多種技術手段,對現有靜電懸浮系統進行了多方面的優化。從懸浮電極的形貌和尺寸以及定位光路考慮,實現了直徑10mm固態金屬材料的

使用TLV320AIC3254EVM-K開發板采集環境音并輸出到耳機接口和喇叭上,拖動任意曲線上的點左聲道就沒有聲音怎么解決?
如題,使用TLV320AIC3254EVM-K開發板采集環境音并輸出到耳機接口和喇叭上,現在遇到問題:
使用Adaptive Filering自適應濾波功能:
只要拖動任意曲線上的點,左聲道就會立刻沒有聲音,只剩右聲道的聲音。輸入輸出配置如下:
發表于 10-18 06:11
控制臺窗口主機是什么
控制臺窗口主機(conhost),通常指的是在Windows操作系統中用于承載和控制控制臺窗口(即命令行界面或CMD窗口)的進程。以下是對控制臺窗口主機的介紹: 一、定義與功能 定義
中值濾波窗口大小對結果影響有哪些
中值濾波是一種常用的數字濾波技術,它通過將信號中的每個點用其鄰域內的中值替換來實現信號的平滑和去噪。中值濾波窗口的大小對濾波結果有很大的影響,以下是對中值濾波窗口大小對結果影響的分析。 窗口
評論