成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS實戰—CommonDialog組件的基本使用

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

[[422102]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

Table of Contents

彈框組件

1. CommonDialog 組成和使用

2. CommonDialog 自定義布局使用

3. 優化代碼——抽取彈框工具類

彈框組件

在HarmonyOS當中,常用的彈框主要有兩種:

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

HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區

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

HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區

1. CommonDialog 組成和使用

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

1.點擊按鈕的時候會彈出來

2.當程序滿足一定要求的時候也會彈出來

項目案例:

  • 新建項目: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="點我" 
  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.給按鈕添加點擊事件 
  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.創建彈框對象 
  39.         // this:當前彈框展示在當前界面中 
  40.         CommonDialog cd = new CommonDialog(this); 
  41.         //2.因為彈框里面是有默認布局的 
  42.         //設置標題 
  43.         cd.setTitleText("系統定位服務已關閉"); 
  44.         //設置內容 
  45.         cd.setContentText("請打開定位服務,以便司機師傅能夠準確接您上車"); 
  46.         //設置按鈕 
  47.         //參數1:按鈕的索引 0 1 2 
  48.         //參數2:按鈕上的文字 
  49.         //參數3:點擊了按鈕之后能做什么 
  50.         cd.setButton(0, "設置", new IDialog.ClickedListener() { 
  51.             @Override 
  52.             public void onClick(IDialog iDialog, int i) { 
  53.                 //寫上點擊了之后設置,要做的事情 
  54.                 //如果點擊了之后不需要做任何事情,在第三個參數中傳遞 null 就可以了 
  55.  
  56.                 //因為這里點擊了設置還無法跳轉到設置定位的那個界面,所以先不寫,等以后學習了再補在這里 
  57.             } 
  58.         }); 
  59.  
  60.         //設置取消按鈕 
  61.         cd.setButton(1,"取消",null); 
  62.  
  63.         //把彈框顯示出來 
  64.         cd.show(); 
  65.     } 
  • 運行:
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 點擊后:
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 當再次點擊灰色區域也沒有反應
  • 點擊或 取消 按鈕時沒有任何反應,因為在上面的那里設置了 null

一般點擊彈框的兩種情況:

  1. 點擊灰色區域也不能取消,必須點擊取消按鈕才能取消彈框
  2. 點擊灰色區域或取消按鈕都能達到取消彈框的效果

下面就實現上面這兩種情況:

1.點擊灰色區域也能取消按鈕的情況,在上面的代碼基礎上補充如下

HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區

2.當鼠標點擊取消按鈕的時候也能讓彈框消失,把上面設置取消按鈕的 null 設置為:

  • 運行,點擊后:

  • 實現了上面的兩種情況

2. CommonDialog 自定義布局使用

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

 

  • 所以只要直接調用方法給里面設置一些文本內容就可以了
  • 下面就介紹下自定義彈框里的內容

案例如下:在主界面上有一個按鈕,點擊了一個按鈕后會出現彈框

  • 彈框里面有三個東西:一行文本和兩個按鈕
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 當點擊了 確定 按鈕后,上面的文本就會變成“點擊了確定按鈕”,當點擊了 取消 按鈕后彈框就會消失
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區

下面就實現下:

  • 新建項目: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="點我" 
  14.         ohos:text_size="40fp" 
  15.         ohos:background_element="red"/> 
  16.  
  17.  
  18. </DirectionalLayout> 
  • 彈框里面的內容也可以用 xml 來寫,新建一個布局文件
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 文件名不能是大寫的
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 上面的彈框組成:一個Text文本+兩個Button
  • 生成彈框的布局文件后,首先改下布局文件的大小,默認的就是充滿整個屏幕的,改為包裹內容的就行了
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 文本的內容因為是變化的,所以在java代碼那里進行設置
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 兩個按鈕如果不設置外邊距的話就會擠在一起,所以要加個上往外邊距

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.添加一個點擊事件 
  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.         //創建一個彈框對象 
  36.         CommonDialog cd = new CommonDialog(this); 
  37.         //大小是默認包裹內容的 
  38.         //彈框默認是居中設置的 
  39.         //彈框默認是透明的 
  40.         //彈框默認是直角的,可以把直角設置為圓角 
  41.         cd.setCornerRadius(15); 
  42.  
  43.  
  44.         //把 messagedialog 的 xml 文件加載到內存當中,交給彈框并且展示出來 
  45.  
  46.         //加載 xml 文件并獲得一個布局對象 
  47.         //parse方法:加載一個 xml 文件,返回一個布局對象 
  48.         //參數一:要加載的 xml 文件 
  49.         //參數二:該 xml 文件是否跟其他 xml 文件有關。如果無關是獨立的,就寫 null 就行了 
  50.         //參數三:如果文件是獨立的,那么直接寫 false 
  51.         DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_messagedialog, nullfalse); 
  52.  
  53.         //要給布局里的文本和按鈕設置事件或者修改內容 
  54.         //此時需要用 dl 去調用,表示獲取的是 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標題設置內容 
  60.         title.setText("請選擇下面的按鈕并點擊"); 
  61.  
  62.         //還需要給兩個按鈕添加單擊事件 
  63.         submit.setClickedListener(new Component.ClickedListener() { 
  64.             @Override 
  65.             public void onClick(Component component) { 
  66.                 title.setText("點擊了確定按鈕"); 
  67.             } 
  68.         }); 
  69.  
  70.         //取消按鈕也要添加點擊事件 
  71.         cancel.setClickedListener(new Component.ClickedListener() { 
  72.             @Override 
  73.             public void onClick(Component component) { 
  74.                 //當點擊取消按鈕之后,把彈框關閉 
  75.                 cd.destroy(); 
  76.             } 
  77.         }); 
  78.  
  79.         //此時布局對象和彈框還沒有任何關系 
  80.         //還需要把布局對象交給彈框 
  81.         cd.setContentCustomComponent(dl); 
  82.  
  83.         //讓彈框展示出來 
  84.         cd.show(); 
  85.  
  86.     } 
  • 運行:

  • 點擊后,就會彈出彈框
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 點擊彈框中的確定按鈕后,文本內容發生改變
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區
  • 點擊取消按鈕后,彈框消失,恢復到原界面
HarmonyOS實戰——CommonDialog組件的基本使用-鴻蒙HarmonyOS技術社區

3. 優化代碼——抽取彈框工具類

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

  • 當外界調用了這個方法之后,就會出現一個彈框

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

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

  • MainAbilitySlice類中修改如下,直接調用MyDialog中的方法,傳遞參數就行了

  • 運行:

  • 點擊確定按鈕后,發現Text文本內容是剛剛方法中傳遞過來

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-09-13 15:17:28

鴻蒙HarmonyOS應用

2021-09-27 10:43:18

鴻蒙HarmonyOS應用

2021-07-05 14:29:28

鴻蒙HarmonyOS應用

2021-09-27 14:44:48

鴻蒙HarmonyOS應用

2021-08-25 09:38:16

鴻蒙HarmonyOS應用

2010-03-04 10:01:01

Android基本組件

2022-02-14 08:58:00

架構

2024-05-23 08:05:04

2012-01-17 13:16:34

JavaSwing

2010-02-03 15:59:08

Android組件

2020-11-16 09:50:43

hpm-cli

2021-09-07 09:53:45

鴻蒙HarmonyOS應用

2011-05-26 09:20:59

配線架

2022-03-02 15:47:57

Dialog組件UI設計鴻蒙

2020-04-19 17:14:17

服務器監控數據中心

2021-12-24 15:46:23

鴻蒙HarmonyOS應用

2016-10-18 21:39:59

Semantic-UIReact基本元素組件

2019-11-27 10:36:23

數據中心邊緣計算技術

2021-08-11 09:32:12

鴻蒙HarmonyOS應用

2022-05-19 15:59:23

組件焦點鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕成人av | 日本精品视频在线 | 亚洲精品电影网在线观看 | 91色视频在线观看 | 精品亚洲视频在线 | 欧日韩在线观看 | www.99精品 | 久久久2o19精品 | 在线观看日韩av | 国产亚洲欧美在线 | 国产成人网 | 亚洲综合色视频在线观看 | 99久久精品免费看国产四区 | 国产高清一区二区三区 | 一级片av| 黄色片av | 久久久亚洲一区 | 亚洲精品久久久久中文字幕欢迎你 | 久久久久国产一区二区三区四区 | 国产精品久久久久久久久久了 | 欧洲视频一区二区 | 欧美视频三级 | 伊人二区 | 国产高清视频 | 亚洲成人一区二区在线 | 国产亚洲精品区 | 精品国产一区二区在线 | 欧美99| 国产亚洲一区二区三区 | 91色视频在线观看 | 欧美日韩一区二区在线观看 | 国产成人精品一区二区三区四区 | 国产精品一区二区三区四区 | 国产久| 亚洲精品自在在线观看 | 色屁屁在线观看 | 天天干国产 | 国产在线一区二区 | 欧美精品99 | 久久久久久亚洲 | 久久专区 |