【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解

【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解

一、前言

鴻蒙中實現彈框目前官方提供openCustomDialog和CustomDialog兩種模式。推薦前者,詳情見下圖和官網文檔鏈接:
在這里插入圖片描述
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-uicontext-custom-dialog-V14
UI強綁定的實現方式API已標注不推薦。推薦使用UI框架層預留掛靠節點的方式,即openCustomDialog。

這兩者的差別詳見【HarmonyOS Next】鴻蒙應用彈框和提示氣泡詳解(一)

除此之外開源三方庫DialogHub可以更加快捷的使用彈窗:
在這里插入圖片描述
https://gitee.com/hadss/dialoghub

DialogHub底層實現原理為,使用浮層OverlayManager?半模態頁面bindSheet來實現彈框。
可以達到我們在傳統Android和IOS開發中,彈框與頁面生命周期綁定的效果(頁面隱藏,彈框隱藏。頁面銷毀,彈框銷毀)

DialogHub接口屬性詳細信息如下:
https://gitee.com/hadss/dialoghub/blob/master/docs/Reference.md
在這里插入圖片描述

二、DialogHub的使用

目前DialogHub還是RC版本,并非Final版本。請謹慎使用。

目前DialogHub可以實現的彈框效果如下:
在這里插入圖片描述
使用起來很簡單,通過三方庫通過級聯的方式,獲取彈框實例對象,設置彈框的樣式,布局,和彈框上的屬性。甚至連彈框內容模板的設置和數據的更新也通過級聯屬性設置,這個思路不錯。

// 導依賴包之后就可操作DialogHub對象
import {DialogHub
} from "@hadss/dialoghub"

在這里插入圖片描述
如圖所示,紅框中提供了默認的三種樣式的彈框。以Toast彈框舉例:

  showToastTest(){DialogHub.getToast().setContent(wrapBuilder(TextToastBuilder))// 自定義內容					.setConfig(CommonConstant.CUSTOM_SAMPLE_CONFIG)// 持續時間			.setDuration(CommonConstant.DURATION_3000).build().show();}// 布局的內容TextToastBuilder() {Stack() {Text("測試文本").fontColor(Color.Black).fontSize(52)}.padding({ left: 20, right: 20 }).height(100)}

自定義彈框:

        this.specifiedLocationDialog = this.specifiedLocationDialog ?? DialogHub.getCustomDialog().setOperableContent(wrapBuilder(SnackbarBuilder), (action: DialogAction) => {let param = new SnackbarParams(() => {action.dismiss()}, this.pageInfos)return param})// DocsDot.setStyle({radius: $r('app.float.custom_template_sample_radius'),shadow: CommonConstant.CUSTOM_SAMPLE_STYLE_SHADOW})// DocsDot.setConfig({dialogBehavior: { isModal: false, passThroughGesture: true },dialogPosition: {alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: $r('app.float.specified_location_offset') }}}).build();this.specifiedLocationDialog.show();

更新彈框內容:

   let intervalID: number = -1;let time: number = CommonConstant.TIMED_DIALOG_DURATION;let params: TimeToastParams =new TimeToastParams(CommonConstant.TIMED_DIALOG, time + CommonConstant.TIMED_CLOSED);// DocsCode 5this.intervalsDisappearsDialog = this.intervalsDisappearsDialog ?? DialogHub.getCustomDialog().setContent(wrapBuilder(TimeToastBuilder), params).setStyle({radius: $r('app.float.popup_disappears_intervals_radius'),shadow: CommonConstant.CUSTOM_SAMPLE_STYLE_SHADOW}).setAnimation({ dialogAnimation: AnimationType.UP_DOWN }).setConfig({dialogBehavior: { isModal: false, passThroughGesture: true },dialogPosition: {alignment: DialogAlignment.Top,offset: { dy: $r('app.float.popup_disappears_intervals_offset'), dx: 0 }}}).build();this.intervalsDisappearsDialog.show();intervalID = setInterval(() => {time -= 1;params.content = time + CommonConstant.TIMED_CLOSED;this.intervalsDisappearsDialog?.updateContent(params)if (time <= 0 && intervalID) {this.intervalsDisappearsDialog?.dismiss();clearInterval(intervalID);}}, CommonConstant.DURATION_1000);

三、源碼示例

首先配置依賴:

{"modelVersion": "5.0.0","description": "Please describe the basic information.","dependencies": {"@hadss/dialoghub": "^1.0.0-rc.1"},"devDependencies": {"@ohos/hypium": "1.0.19","@ohos/hamock": "1.0.0"},"dynamicDependencies": {}
}

之后導入包,進行調用:

import { DialogHub } from '@hadss/dialoghub';
import { getContext } from '@ohos.app.ability';
import CommonConstant from '../utils/CommonConstant';// 假設的 TextToastParams 類型
interface TextToastParams {title?: string;
}// TextToastBuilder 構建器函數

export function TextToastBuilder(param: TextToastParams) {Stack() {Text(param?.title ?? CommonConstant.PURE_TEXT).fontColor($r('app.color.item_text_color')).fontSize($r('app.float.font_size_regular'))}.padding({ left: $r('app.float.text_toast_padding'), right: $r('app.float.text_toast_padding') }).height($r('app.float.text_toast_height'))
}// 假設的組件擴展,用于按鈕樣式
(Button)
function superFancyButton() {return this.width(CommonConstant.FULL_LENGTH).height($r('app.float.index_action_height')).margin({ bottom: $r('app.float.index_action_margin') }).fontSize($r('app.float.font_size_medium')).fontWeight(FontWeight.Medium).backgroundColor($r('app.color.base_blue'));
}

struct DialogHubExample {// 獲取 UI 上下文getUIContext() {return getContext();}aboutToAppear(): void {// 初始化 DialogHubDialogHub.init(this.getUIContext());// 開啟日志DialogHub.openLog('DEBUG');// 創建自定義模板DialogHub.createCustomTemplate(CommonConstant.CUSTOM_TEMPLATE_SIMPLE).setContent(wrapBuilder(TextToastBuilder)).setStyle({ backgroundColor: Color.White }).setConfig({ dialogBehavior: { passThroughGesture: true, isModal: false } }).register();}showCustomDialog() {// 顯示自定義模板的彈框DialogHub.show({templateName: CommonConstant.CUSTOM_TEMPLATE_SIMPLE,data: {// 傳遞數據給彈框title: '這是自定義彈框的標題'}});}build() {Column({ space: 20 }) {Button('顯示自定義彈框', { stateEffect: true, type: ButtonType.Capsule }).superFancyButton().onClick(() => {this.showCustomDialog();});}.width('100%').height('100%').padding({ top: 20, bottom: 20, left: 20, right: 20 });}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74102.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習算法實戰——天氣數據分析(主頁有源碼)

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ? ??? 1. 引言 天氣數據分析是氣象學和數據科學交叉領域的一個重要研究方向。隨著大數據技術的發展&#xff0c;氣象數據的采集、存儲和分…

輸電線路專業英語詞匯

輸電線路transmission line 雙回路double circuit 導線conductor 地線ground &#xff08;Earth&#xff09;wire 雙回路耐張塔double-circuit tension towers 直線塔tangent tower 地質Geological 水文Hydrological 塔位坐標Coordinate of Tower Location 轉角塔angle tower 直…

炫酷的3D按鈕效果實現 - CSS3高級特性應用

炫酷的3D按鈕效果實現 - CSS3高級特性應用 這里寫目錄標題 炫酷的3D按鈕效果實現 - CSS3高級特性應用項目介紹核心技術實現1. 基礎結構設計2. 視覺效果實現2.1 背景漸變2.2 立體感營造 3. 交互動效設計3.1 懸停效果3.2 按壓效果 技術要點分析1. 深度層次感2. 動畫過渡3. 性能優…

解決python配置文件類configparser.ConfigParser,插入、讀取數據,自動轉為小寫的問題

配置類 [Section1] Key_AAA Value[Section2] AnotherKey Value默認情況下&#xff0c;ConfigParser會將ini配置文件中的KEY&#xff0c;轉為小寫。 重載后配置類&#xff1a; 繼承類從configparser.ConfigParser改為configparser.RawConfigParser重載方法optionxform&#…

微服務的網關配置

微服務的網關配置 1. 網關路由 1.1 網關 1.1.1 存在問題 單體架構時我們只需要完成一次用戶登錄、身份校驗&#xff0c;就可以在所有業務中獲取到用戶信息。而微服務拆分后&#xff0c;每個微服務都獨立部署&#xff0c;這就存在一些問題&#xff1a;每個微服務都需要編寫身…

【硬核實戰】ETCD+AI智能調度深度整合!從架構設計到調優避坑,手把手教你打造高可用調度系統!

一、核心架構設計&#xff1a;ETCD如何賦能AI調度&#xff1f; &#x1f525; 架構圖&#xff1a; [AI調度引擎] ← 實時數據 → [ETCD集群] ↓ 決策指令 [執行層&#xff08;車輛/物流/交通設備&#xff09;] 核心角色&#xff1a; ETCD&#xff1a;存儲調度策略、節點狀…

區間震蕩指標

區間震蕩指標的邏輯如下&#xff1a; 一、函數注解 1. Summation函數 功能&#xff1a; 計算給定價格序列Price的前Length個數據點的和&#xff0c;或在數據點數量超過Length時&#xff0c;計算滾動窗口內的價格和。 參數&#xff1a; Price(1)&#xff1a;價格序列&#…

C語言-數組指針和指針數組

指針 數組指針與指針數組 數組指針 定義 概念&#xff1a;數組指針是指向數組的指針&#xff0c;本質上還是指針 特點&#xff1a; ①先有數組&#xff0c;后有指針 ②它指向的是一個完整的數組 一維數組指針 語法&#xff1a; 數據類型 (*指針變量名)[容量]; 案例&a…

31天Python入門——第5天:循環那些事兒

你好&#xff0c;我是安然無虞。 文章目錄 1. while循環1.1 while循環的嵌套1.2 補充學習:print函數 2. for循環2.1 range函數2.2 for循環2.3 continue和break以及return2.4 for循環的嵌套 3. 補充學習3.1 enumerate函數3.2 zip函數3.3 不要在遍歷列表的過程中刪除元素 循環 是…

T3 出行:網約車全棧分布式數據庫升級實踐

現今&#xff0c;網約車已成為民眾日常出行不可或缺的選擇。伴隨“互聯網出行”模式的快速推進&#xff0c;龐大的出行數據應運而生&#xff0c;如同構建了城市交通系統的數字神經脈絡。與此同時&#xff0c;對高效數據存儲與深入數據分析的需求也在持續攀升。 T3 出行于2019年…

區塊鏈技術在供應鏈管理中的應用與創新

在當今全球化的商業環境中&#xff0c;供應鏈管理的復雜性與日俱增。從原材料采購到最終產品交付&#xff0c;涉及眾多環節和參與者&#xff0c;信息的透明度、準確性和安全性至關重要。區塊鏈技術的出現&#xff0c;為供應鏈管理帶來了全新的解決方案&#xff0c;正在逐步改變…

藍橋每日打卡--打家劫舍4

#藍橋#JAVA#打家劫舍4 題目描述 沿街有一排連續的房屋。每間房屋內都藏有一定的現金。現在有一位小偷計劃從這些房屋中竊取現金。 由于相鄰的房屋裝有相互連通的防盜系統&#xff0c;所以小偷 不會竊取相鄰的房屋 。 小偷的 竊取能力 定義為他在竊取過程中能從單間房屋中竊…

c#難點整理

1.何為托管代碼&#xff0c;何為非托管代碼 托管代碼就是.net框架下的代碼 非托管代碼&#xff0c;就是非.net框架下的代碼 2.委托的關鍵知識點 將方法作為參數進行傳遞 3.多維數組 4.鋸齒數組 5.多播委托的使用 6.is運算符 相當于邏輯運算符是 7.as 起到轉換的作用 8.可…

Nginx代理本機的443到本機的8080端口

1. 準備工作 確認已生成 IP 的 HTTPS 證書 假設你已通過 mkcert 生成證書&#xff08;如 192.168.199.191.pem 和 192.168.199.191-key.pem&#xff09;&#xff0c;并已安裝 CA 證書&#xff08;運行過 mkcert -install&#xff09;。 Nginx 安裝 ? 若未安裝 Nginx&#…

善用批處理的for命令倍增效率(附彩蛋:windows官方bug)

前言 在我們工作中,如果使用Windows系統,善用批處理命令,特別是在批量的文件處理,文本處理時能幫助我們極大地提升工作效率,起到事半功倍的效果! 但很多同學,對批處理的使用更多還停留在可以將多個command命令組合到一起執行,省去重復敲命令和等待的時間。這個其實只…

數據結構之棧的2種實現方式(順序棧+鏈棧,附帶C語言完整實現源碼)

對于邏輯關系為“一對一”的數據&#xff0c;除了用順序表和鏈表存儲外&#xff0c;還可以用棧結構存儲。 棧是一種“特殊”的線性存儲結構&#xff0c;它的特殊之處體現在以下兩個地方&#xff1a; 1、元素進棧和出棧的操作只能從一端完成&#xff0c;另一端是封閉的&#xf…

Camera2 API拍照失敗問題實錄:從錯誤碼到格式轉換的排坑之旅

一、問題背景 在開發基于Camera2 API的相機應用時&#xff0c;我們遇到了一個棘手的問題&#xff1a;預覽功能在所有設備上工作正常&#xff0c;但在某特定安卓設備上點擊拍照按鈕后無任何響應。值得注意的是&#xff0c;使用舊版Camera API時該設備可以正常拍照。本文記錄了完…

Jmeter舊版本如何下載

1.Jmeter最新版本下載位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter舊版本下載位置 https://archive.apache.org/dist/jmeter/binaries穩定版本&#xff1a;5.4.1

css-grid布局

文章目錄 1、布局2、網格軌道3、間距Gap4、網格線5、網格別名 當一個 HTML 元素將 display 屬性設置為 grid 或 inline-grid 后&#xff0c;它就變成了一個網格容器&#xff0c;這個元素的所有直系子元素將成為網格元素。 1、布局 啟用grid布局類似與flex布局&#xff0c;不過g…

SolidWorks使用顯卡教程

操作步驟&#xff1a; 打開注冊表編輯器 按下鍵盤上的 Win R 組合鍵&#xff0c;輸入 regedit 并按回車鍵&#xff0c;打開注冊表編輯器。 導航到顯卡信息路徑 在注冊表中依次展開以下路徑&#xff1a; plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…