自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS實戰(zhàn)—CommonDialog組件的基本使用

系統(tǒng) OpenHarmony
在HarmonyOS當(dāng)中,常用的彈框主要有兩種:第一種是普通彈框(CommonDialog),第二種消息提示彈框(ToastDialog)。

[[422102]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

Table of Contents

彈框組件

1. CommonDialog 組成和使用

2. CommonDialog 自定義布局使用

3. 優(yōu)化代碼——抽取彈框工具類

彈框組件

在HarmonyOS當(dāng)中,常用的彈框主要有兩種:

1.第一種是普通彈框(CommonDialog),提示用戶并讓用戶進(jìn)行對應(yīng)的操作的,比如使用打車軟件的時候,如果手機(jī)沒有開定位,就會有彈框提示,讓你在手機(jī)中開啟定位,這就是一個普通彈框,給你作為一個信息的提示,并且做一些操作。

HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)

2. 第二種消息提示彈框(ToastDialog),如:在每次打開“小破站”APP的時候,都會彈出提示,這些也是彈框。這些彈框不需要用戶選擇的,只是告訴用戶一些消息而已

HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)

1. CommonDialog 組成和使用

  • 在鴻蒙當(dāng)中,這種普通和彈框其實是有默認(rèn)布局的
  • 下面的選擇按鈕最多只有三個
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 彈框并不是APP啟動時立馬彈出來的,一般會有兩種情況:

1.點(diǎn)擊按鈕的時候會彈出來

2.當(dāng)程序滿足一定要求的時候也會彈出來

項目案例:

  • 新建項目:DialogApplication

ability_main

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:alignment="center" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Button 
  10.         ohos:id="$+id:but1" 
  11.         ohos:height="match_content" 
  12.         ohos:width="match_content" 
  13.         ohos:text="點(diǎn)我" 
  14.         ohos:text_size="40vp" 
  15.         ohos:background_element="red"/> 
  16.  
  17. </DirectionalLayout> 

 MainAbilitySlice

  1. package com.xdr630.dialogapplication.slice; 
  2.  
  3. import com.xdr630.dialogapplication.ResourceTable; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.Button; 
  7. import ohos.agp.components.Component; 
  8. import ohos.agp.window.dialog.CommonDialog; 
  9. import ohos.agp.window.dialog.IDialog; 
  10.  
  11. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { 
  12.     @Override 
  13.     public void onStart(Intent intent) { 
  14.         super.onStart(intent); 
  15.         super.setUIContent(ResourceTable.Layout_ability_main); 
  16.  
  17.         //1.找到按鈕 
  18.         Button but1 = (Button) findComponentById(ResourceTable.Id_but1); 
  19.  
  20.         //2.給按鈕添加點(diǎn)擊事件 
  21.         but1.setClickedListener(this); 
  22.  
  23.     } 
  24.  
  25.     @Override 
  26.     public void onActive() { 
  27.         super.onActive(); 
  28.     } 
  29.  
  30.     @Override 
  31.     public void onForeground(Intent intent) { 
  32.         super.onForeground(intent); 
  33.     } 
  34.  
  35.     @Override 
  36.     public void onClick(Component component) { 
  37.         //把普通彈框彈出來就可以了 
  38.         //1.創(chuàng)建彈框?qū)ο?nbsp;
  39.         // this:當(dāng)前彈框展示在當(dāng)前界面中 
  40.         CommonDialog cd = new CommonDialog(this); 
  41.         //2.因為彈框里面是有默認(rèn)布局的 
  42.         //設(shè)置標(biāo)題 
  43.         cd.setTitleText("系統(tǒng)定位服務(wù)已關(guān)閉"); 
  44.         //設(shè)置內(nèi)容 
  45.         cd.setContentText("請打開定位服務(wù),以便司機(jī)師傅能夠準(zhǔn)確接您上車"); 
  46.         //設(shè)置按鈕 
  47.         //參數(shù)1:按鈕的索引 0 1 2 
  48.         //參數(shù)2:按鈕上的文字 
  49.         //參數(shù)3:點(diǎn)擊了按鈕之后能做什么 
  50.         cd.setButton(0, "設(shè)置", new IDialog.ClickedListener() { 
  51.             @Override 
  52.             public void onClick(IDialog iDialog, int i) { 
  53.                 //寫上點(diǎn)擊了之后設(shè)置,要做的事情 
  54.                 //如果點(diǎn)擊了之后不需要做任何事情,在第三個參數(shù)中傳遞 null 就可以了 
  55.  
  56.                 //因為這里點(diǎn)擊了設(shè)置還無法跳轉(zhuǎn)到設(shè)置定位的那個界面,所以先不寫,等以后學(xué)習(xí)了再補(bǔ)在這里 
  57.             } 
  58.         }); 
  59.  
  60.         //設(shè)置取消按鈕 
  61.         cd.setButton(1,"取消",null); 
  62.  
  63.         //把彈框顯示出來 
  64.         cd.show(); 
  65.     } 
  • 運(yùn)行:
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 點(diǎn)擊后:
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 當(dāng)再次點(diǎn)擊灰色區(qū)域也沒有反應(yīng)
  • 點(diǎn)擊或 取消 按鈕時沒有任何反應(yīng),因為在上面的那里設(shè)置了 null

一般點(diǎn)擊彈框的兩種情況:

  1. 點(diǎn)擊灰色區(qū)域也不能取消,必須點(diǎn)擊取消按鈕才能取消彈框
  2. 點(diǎn)擊灰色區(qū)域或取消按鈕都能達(dá)到取消彈框的效果

下面就實現(xiàn)上面這兩種情況:

1.點(diǎn)擊灰色區(qū)域也能取消按鈕的情況,在上面的代碼基礎(chǔ)上補(bǔ)充如下

HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)

2.當(dāng)鼠標(biāo)點(diǎn)擊取消按鈕的時候也能讓彈框消失,把上面設(shè)置取消按鈕的 null 設(shè)置為:

  • 運(yùn)行,點(diǎn)擊后:

  • 實現(xiàn)了上面的兩種情況

2. CommonDialog 自定義布局使用

  • CommonDialog 里面有默認(rèn)的布局,布局由如下三部分組成:

 

  • 所以只要直接調(diào)用方法給里面設(shè)置一些文本內(nèi)容就可以了
  • 下面就介紹下自定義彈框里的內(nèi)容

案例如下:在主界面上有一個按鈕,點(diǎn)擊了一個按鈕后會出現(xiàn)彈框

  • 彈框里面有三個東西:一行文本和兩個按鈕
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 當(dāng)點(diǎn)擊了 確定 按鈕后,上面的文本就會變成“點(diǎn)擊了確定按鈕”,當(dāng)點(diǎn)擊了 取消 按鈕后彈框就會消失
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)

下面就實現(xiàn)下:

  • 新建項目:DialogLayoutApplication
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:alignment="center" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Button 
  10.         ohos:id="$+id:but" 
  11.         ohos:height="match_content" 
  12.         ohos:width="match_content" 
  13.         ohos:text="點(diǎn)我" 
  14.         ohos:text_size="40fp" 
  15.         ohos:background_element="red"/> 
  16.  
  17.  
  18. </DirectionalLayout> 
  • 彈框里面的內(nèi)容也可以用 xml 來寫,新建一個布局文件
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 文件名不能是大寫的
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 上面的彈框組成:一個Text文本+兩個Button
  • 生成彈框的布局文件后,首先改下布局文件的大小,默認(rèn)的就是充滿整個屏幕的,改為包裹內(nèi)容的就行了
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 文本的內(nèi)容因為是變化的,所以在java代碼那里進(jìn)行設(shè)置
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 兩個按鈕如果不設(shè)置外邊距的話就會擠在一起,所以要加個上往外邊距

messagedialog

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_content" 
  5.     ohos:width="match_content" 
  6.     ohos:orientation="vertical"
  7.  
  8.     <Text 
  9.         ohos:id="$+id:message" 
  10.         ohos:height="match_content" 
  11.         ohos:width="match_content" 
  12.         ohos:text_size="40fp"/> 
  13.      
  14.     <Button 
  15.         ohos:id="$+id:submit" 
  16.         ohos:height="match_content" 
  17.         ohos:width="match_content" 
  18.         ohos:text="確定" 
  19.         ohos:text_size="40fp" 
  20.         ohos:background_element="red"/> 
  21.  
  22.     <Button 
  23.         ohos:id="$+id:cancel" 
  24.         ohos:height="match_content" 
  25.         ohos:width="match_content" 
  26.         ohos:text="取消" 
  27.         ohos:text_size="40fp" 
  28.         ohos:background_element="blue" 
  29.         ohos:top_margin="10vp" 
  30.         /> 
  31.  
  32.  
  33. </DirectionalLayout> 

MainAbilitySlice

  1. package com.xdr630.dialoglayoutapplication.slice; 
  2.  
  3. import com.xdr630.dialoglayoutapplication.ResourceTable; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.*; 
  7. import ohos.agp.window.dialog.CommonDialog; 
  8.  
  9. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { 
  10.     @Override 
  11.     public void onStart(Intent intent) { 
  12.         super.onStart(intent); 
  13.         super.setUIContent(ResourceTable.Layout_ability_main); 
  14.  
  15.         //1.找到布局中的按鈕 
  16.         Button but = (Button) findComponentById(ResourceTable.Id_but); 
  17.  
  18.         //2.添加一個點(diǎn)擊事件 
  19.         but.setClickedListener(this); 
  20.     } 
  21.  
  22.     @Override 
  23.     public void onActive() { 
  24.         super.onActive(); 
  25.     } 
  26.  
  27.     @Override 
  28.     public void onForeground(Intent intent) { 
  29.         super.onForeground(intent); 
  30.     } 
  31.  
  32.     @Override 
  33.     public void onClick(Component component) { 
  34.         //把彈框展示出來 
  35.         //創(chuàng)建一個彈框?qū)ο?nbsp;
  36.         CommonDialog cd = new CommonDialog(this); 
  37.         //大小是默認(rèn)包裹內(nèi)容的 
  38.         //彈框默認(rèn)是居中設(shè)置的 
  39.         //彈框默認(rèn)是透明的 
  40.         //彈框默認(rèn)是直角的,可以把直角設(shè)置為圓角 
  41.         cd.setCornerRadius(15); 
  42.  
  43.  
  44.         //把 messagedialog 的 xml 文件加載到內(nèi)存當(dāng)中,交給彈框并且展示出來 
  45.  
  46.         //加載 xml 文件并獲得一個布局對象 
  47.         //parse方法:加載一個 xml 文件,返回一個布局對象 
  48.         //參數(shù)一:要加載的 xml 文件 
  49.         //參數(shù)二:該 xml 文件是否跟其他 xml 文件有關(guān)。如果無關(guān)是獨(dú)立的,就寫 null 就行了 
  50.         //參數(shù)三:如果文件是獨(dú)立的,那么直接寫 false 
  51.         DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_messagedialog, nullfalse); 
  52.  
  53.         //要給布局里的文本和按鈕設(shè)置事件或者修改內(nèi)容 
  54.         //此時需要用 dl 去調(diào)用,表示獲取的是 dl 這個布局里面的組件 
  55.         Text title = (Text) dl.findComponentById(ResourceTable.Id_message); 
  56.         Button submit = (Button) dl.findComponentById(ResourceTable.Id_submit); 
  57.         Button cancel = (Button) dl.findComponentById(ResourceTable.Id_cancel); 
  58.  
  59.         //給title標(biāo)題設(shè)置內(nèi)容 
  60.         title.setText("請選擇下面的按鈕并點(diǎn)擊"); 
  61.  
  62.         //還需要給兩個按鈕添加單擊事件 
  63.         submit.setClickedListener(new Component.ClickedListener() { 
  64.             @Override 
  65.             public void onClick(Component component) { 
  66.                 title.setText("點(diǎn)擊了確定按鈕"); 
  67.             } 
  68.         }); 
  69.  
  70.         //取消按鈕也要添加點(diǎn)擊事件 
  71.         cancel.setClickedListener(new Component.ClickedListener() { 
  72.             @Override 
  73.             public void onClick(Component component) { 
  74.                 //當(dāng)點(diǎn)擊取消按鈕之后,把彈框關(guān)閉 
  75.                 cd.destroy(); 
  76.             } 
  77.         }); 
  78.  
  79.         //此時布局對象和彈框還沒有任何關(guān)系 
  80.         //還需要把布局對象交給彈框 
  81.         cd.setContentCustomComponent(dl); 
  82.  
  83.         //讓彈框展示出來 
  84.         cd.show(); 
  85.  
  86.     } 
  • 運(yùn)行:

  • 點(diǎn)擊后,就會彈出彈框
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 點(diǎn)擊彈框中的確定按鈕后,文本內(nèi)容發(fā)生改變
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 點(diǎn)擊取消按鈕后,彈框消失,恢復(fù)到原界面
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)

3. 優(yōu)化代碼——抽取彈框工具類

  • 在工作當(dāng)中,如果需要用多個彈框,而每次都和上面一樣寫的話,就會造成代碼冗余,不方便管理
  • 下面就把彈框抽取成一個工具類,當(dāng)用到一個彈框的時候,直接調(diào)用工具類中的方法就可以了
  • 創(chuàng)建一個工具類
HarmonyOS實戰(zhàn)——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • 創(chuàng)建一個彈框的工具類:MyDialog

  • 當(dāng)外界調(diào)用了這個方法之后,就會出現(xiàn)一個彈框

  • 把上面的 OnClick 方法中的代碼剪切到上面的 showDialog 方法中

  • 粘貼過來后,MyDialog類中部分代碼修改如下

  • MainAbilitySlice類中修改如下,直接調(diào)用MyDialog中的方法,傳遞參數(shù)就行了

  • 運(yùn)行:

  • 點(diǎn)擊確定按鈕后,發(fā)現(xiàn)Text文本內(nèi)容是剛剛方法中傳遞過來

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-09-13 15:17:28

鴻蒙HarmonyOS應(yīng)用

2021-07-05 14:29:28

鴻蒙HarmonyOS應(yīng)用

2021-09-27 10:43:18

鴻蒙HarmonyOS應(yīng)用

2021-09-27 14:44:48

鴻蒙HarmonyOS應(yīng)用

2021-08-25 09:38:16

鴻蒙HarmonyOS應(yīng)用

2010-03-04 10:01:01

Android基本組件

2022-02-14 08:58:00

架構(gòu)

2024-05-23 08:05:04

2012-01-17 13:16:34

JavaSwing

2021-12-24 15:46:23

鴻蒙HarmonyOS應(yīng)用

2010-02-03 15:59:08

Android組件

2020-11-16 09:50:43

hpm-cli

2011-05-26 09:20:59

配線架

2021-09-07 09:53:45

鴻蒙HarmonyOS應(yīng)用

2020-04-19 17:14:17

服務(wù)器監(jiān)控數(shù)據(jù)中心

2016-10-18 21:39:59

Semantic-UIReact基本元素組件

2019-11-27 10:36:23

數(shù)據(jù)中心邊緣計算技術(shù)

2021-08-11 09:32:12

鴻蒙HarmonyOS應(yīng)用

2022-03-02 15:47:57

Dialog組件UI設(shè)計鴻蒙

2009-08-21 09:14:47

C# Excel CO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號