介紹
本篇Codelab主要基于dialog和button組件,實現(xiàn)彈窗的幾種自定義效果,具體效果有:
- 警告彈窗,點擊確認(rèn)按鈕彈窗關(guān)閉。
- 確認(rèn)彈窗,點擊取消按鈕或確認(rèn)按鈕,觸發(fā)對應(yīng)操作。
- 加載彈窗,展示加載中效果。
- 提示彈窗,支持用戶輸入內(nèi)容,點擊取消和確認(rèn)按鈕,觸發(fā)對應(yīng)操作。
- 進(jìn)度條彈窗,展示進(jìn)度條以及百分比。
相關(guān)概念
- [dialog組件]:自定義彈窗容器組件。
- [button組件]:按鈕組件。
環(huán)境搭建
軟件要求
- [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。
- OpenHarmony SDK版本:API version 9及以上版本。
硬件要求
- 開發(fā)板類型:[潤和RK3568開發(fā)板]。
- OpenHarmony系統(tǒng):3.2 Release及以上版本。
環(huán)境搭建
完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進(jìn)行:
- [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進(jìn)制)。以3.2 Release版本為例:
- 搭建燒錄環(huán)境。
- [完成DevEco Device Tool的安裝]
- [完成RK3568開發(fā)板的燒錄]
- 搭建開發(fā)環(huán)境。
代碼結(jié)構(gòu)解讀
本篇Codelab只對核心代碼進(jìn)行講解,對于完整代碼,我們會在gitee中提供。
├──entry/src/main/js // 代碼區(qū)
│ └──MainAbility
│ ├──common
│ │ └──images // 圖片資源
│ ├──i18n // 國際化中英文
│ │ ├──en-US.json
│ │ └──zh-CN.json
│ ├──pages
│ │ └──index
│ │ ├──index.css // 頁面整體布局以及彈窗樣式
│ │ ├──index.hml // 自定義彈窗展示頁面
│ │ └──index.js // 彈窗顯示關(guān)閉邏輯以及動畫邏輯
│ └──app.js // 程序入口
└──entry/src/main/resources // 應(yīng)用資源目錄
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
構(gòu)建界面
界面主要包括按鈕列表頁和自定義彈窗兩部分,我們可以通過在dialog標(biāo)簽中添加自定義組件設(shè)置彈窗,具體效果如圖所示:
首先搭建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中創(chuàng)建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 >
確認(rèn)彈窗(ConfirmDialog)
創(chuàng)建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)
創(chuàng)建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)
創(chuàng)建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 >
進(jìn)度條彈窗(ProgressDialog)
創(chuàng)建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中文件實現(xiàn)不同button的點擊事件,展示對應(yīng)彈窗:
// 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
+關(guān)注
關(guān)注
80文章
2141瀏覽量
34961 -
OpenHarmony
+關(guān)注
關(guān)注
31文章
3891瀏覽量
20189 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
191瀏覽量
5232
發(fā)布評論請先 登錄
HarmonyOS開發(fā)案例:【 自定義彈窗】

HarmonyOS實戰(zhàn)開發(fā)-全局彈窗封裝案例
HarmonyOS IoT 硬件開發(fā)案例分享
【潤和直播課預(yù)告@華為開發(fā)者學(xué)院】HarmonyOS設(shè)備開發(fā)基礎(chǔ)課程|HiSpark WiFi-IoT 智能小車套件開發(fā)案例
HarmonyOS應(yīng)用開發(fā)-eTS-警告彈窗
HarmonyOS應(yīng)用開發(fā)-XPopup常用的彈窗體驗
OpenHarmony應(yīng)用開發(fā)之自定義彈窗
HarmonyOS Codelab 樣例 一彈窗基本使用
許思維老師HarmonyOS IoT硬件開發(fā)案例分享

華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案例

HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(上)

HarmonyOS實戰(zhàn):首頁多彈窗順序彈出終極解決方案

評論