介紹
本篇Codelab主要基于dialog和button組件,實現彈窗的幾種自定義效果,具體效果有:
- 警告彈窗,點擊確認按鈕彈窗關閉。
- 確認彈窗,點擊取消按鈕或確認按鈕,觸發對應操作。
- 加載彈窗,展示加載中效果。
- 提示彈窗,支持用戶輸入內容,點擊取消和確認按鈕,觸發對應操作。
- 進度條彈窗,展示進度條以及百分比。
相關概念
- [dialog組件]:自定義彈窗容器組件。
- [button組件]:按鈕組件。
環境搭建
軟件要求
- [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。
- OpenHarmony SDK版本:API version 9及以上版本。
硬件要求
- 開發板類型:[潤和RK3568開發板]。
- OpenHarmony系統:3.2 Release及以上版本。
環境搭建
完成本篇Codelab我們首先要完成開發環境的搭建,本示例以RK3568開發板為例,參照以下步驟進行:
- [獲取OpenHarmony系統版本]:標準系統解決方案(二進制)。以3.2 Release版本為例:
- 搭建燒錄環境。
- [完成DevEco Device Tool的安裝]
- [完成RK3568開發板的燒錄]
- 搭建開發環境。
代碼結構解讀
本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在gitee中提供。
├──entry/src/main/js // 代碼區
│ └──MainAbility
│ ├──common
│ │ └──images // 圖片資源
│ ├──i18n // 國際化中英文
│ │ ├──en-US.json
│ │ └──zh-CN.json
│ ├──pages
│ │ └──index
│ │ ├──index.css // 頁面整體布局以及彈窗樣式
│ │ ├──index.hml // 自定義彈窗展示頁面
│ │ └──index.js // 彈窗顯示關閉邏輯以及動畫邏輯
│ └──app.js // 程序入口
└──entry/src/main/resources // 應用資源目錄
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
構建界面
界面主要包括按鈕列表頁和自定義彈窗兩部分,我們可以通過在dialog標簽中添加自定義組件設置彈窗,具體效果如圖所示:
首先搭建index.hml中的按鈕頁,主要包括5種常見的彈窗,分別為AlertDialog、ConfirmDialog、LoadingDialog、PromptDialog以及ProgressDialog。
< !--index.hml-- >
< div class="btn-div" >
< button type="capsule" value="AlertDialog" class="btn" onclick="showAlert" >< /button >
< button type="capsule" value="ConfirmDialog" class="btn" onclick="showConfirm" >< /button >
< button type="capsule" value="LoadingDialog" class="btn" onclick="showLoading" >< /button >
< button type="capsule" value="PromptDialog" class="btn" onclick="showPrompt" >< /button >
< button type="capsule" value="ProgressDialog" class="btn" onclick="showProgress" >< /button >
< /div >
警告彈窗(AlertDialog)
然后在index.hml中創建AlertDialog自定義彈窗,效果如圖所示:
< !-- index.hml -- >
< !-- AlertDialog自定義彈窗 -- >
< dialog id="alertDialog" class="alert-dialog" >
< div class="dialog-div" >
< div class="alert-inner-txt" >
< text class="txt" >AlertDialog< /text >
< /div >
< div class="alert-inner-btn" >
< button class="btn-single" type="capsule" value="Confirm" onclick="confirmClick('alertDialog')" >
< /button >
< /div >
< /div >
< /dialog >
確認彈窗(ConfirmDialog)
創建ConfirmDialog自定義彈窗,效果如圖所示:
< !-- index.hml -- >
< !-- ConfirmDialog自定義彈窗 -- >
< dialog id="confirmDialog" class="dialog-main" >
< div class="dialog-div" >
< div class="inner-txt" >
< text class="txt" >ConfirmDialog< /text >
< /div >
< div class="inner-btn" >
< button type="capsule" value="Cancel" class="btn-txt-left" onclick="cancelClick('confirmDialog')" >
< /button >
< button type="capsule" value="Confirm" class="btn-txt-right" onclick="confirmClick('confirmDialog')" >
< /button >
< /div >
< /div >
< /dialog >
加載彈窗(LoadingDialog)
創建LoadingDialog自定義彈窗,效果如圖所示:
< !-- index.hml -- >
< !-- LoadingDialog自定義彈窗 -- >
< dialog id="loadingDialog" class="low-height-dialog" >
< div class="dialog-loading" >
< text >Loading...< /text >
< image class="loading-img img-rotate" id="loading-img" src="/common/images/ic_loading.svg" >< /image >
< /div >
< /dialog >
提示彈窗(PromptDialog)
創建PromptDialog自定義彈窗,效果如圖所示:
< !-- index.hml -- >
< !-- PromptDialog自定義彈窗 -- >
< dialog id="promptDialog" class="dialog-prompt" >
< div class="dialog-div-prompt" >
< div class="inner-txt-prompt" >
< text class="txt" >PromptDialog< /text >
< /div >
< input class="prompt-input" type="password" placeholder="please enter password" >
< /input >
< div class="inner-btn" >
< button type="capsule" value="Cancel" class="btn-txt-left" onclick="cancelClick('promptDialog')" >
< /button >
< button type="capsule" value="Confirm" class="btn-txt-right" onclick="confirmClick('promptDialog')" >
< /button >
< /div >
< /div >
< /dialog >
進度條彈窗(ProgressDialog)
創建ProgressDialog自定義彈窗,效果如圖所示:
< !-- index.hml -- >
< !-- ProgressDialog自定義彈窗 -- >
< dialog id="progressDialog" class="low-height-dialog" oncancel="onCancel" >
< div class="dialog-progress-div" >
< div class="inner-txt-progress" >
< text class="download-txt" >Downloading...< /text >
< text >{{ percent + '%' }}< /text >
< /div >
< div class="progress-div" >
< progress class="min-progress" type="horizontal" percent="{{ percent }}" secondarypercent="50" >
< /progress >
< /div >
< /div >
< /dialog >
然后在index.js中文件實現不同button的點擊事件,展示對應彈窗:
// index.js
export default {
data: {...},
// 展示AlertDialog
showAlert() {
this.$element('alertDialog').show();
},
// 展示ConfirmDialog
showConfirm() {
this.$element('confirmDialog').show();
},
// 展示LoadingDialog
showLoading() {
...
this.animation = this.$element('loading-img').animate(frames, options);
this.animation.play();
this.$element('loadingDialog').show();
},
// 展示PromptDialog
showPrompt() {
this.$element('promptDialog').show();
},
// 展示ProgressDialog
showProgress() {
...
}
}
審核編輯 黃宇
-
HarmonyOS
+關注
關注
79文章
1975瀏覽量
30194 -
OpenHarmony
+關注
關注
25文章
3722瀏覽量
16317 -
鴻蒙OS
+關注
關注
0文章
188瀏覽量
4391
發布評論請先 登錄
相關推薦
評論