色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙ArkUI開發-應用添加彈窗

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-24 17:22 ? 次閱讀

在我們日常使用應用的時候,可能會進行一些敏感的操作,比如刪除聯系人,這時候我們給應用添加彈窗來提示用戶是否需要執行該操作,如下圖所示:

彈窗是一種模態窗口,通常用來展示用戶當前需要的或用戶必須關注的信息或操作。在彈出框消失之前,用戶無法操作其他界面內容。ArkUI為我們提供了豐富的彈窗功能,彈窗按照功能可以分為以下兩類:

  • 確認類:例如警告彈窗AlertDialog。
  • 選擇類:包括文本選擇彈窗TextPickerDialog 、日期滑動選擇彈窗DatePickerDialog、時間滑動選擇彈窗TimePickerDialog等。

您可以根據業務場景,選擇不同類型的彈窗。部分彈窗效果圖如下:

此外,如果上述彈窗還不能滿足您的需求,或者需要對彈窗的布局和樣式進行自定義,您還可以使用自定義彈窗CustomDialog。 下文將分別介紹AlertDialog 、TextPickerDialog 、DatePickerDialog以及CustomDialog的使用。

警告彈窗

警告彈窗AlertDialog由以下三部分區域構成,對應下面的示意圖:

  1. 標題區:為可選的。
  2. 內容區:顯示提示消息。
  3. 操作按鈕區:用戶做”確認“或者”取消“等操作。

以下示例代碼,演示了如何使用AlertDialog 實現上圖所示的警告彈窗。AlertDialog可以設置兩個操作按鈕,示例代碼中分別使用primaryButton和secondaryButton實現了“取消”和“刪除”操作按鈕,操作按鈕可以通過action響應點擊事件。

Button('點擊顯示彈窗')
  .onClick(() = > {
    AlertDialog.show(
      {
        title: '刪除聯系人', // 標題
        message: '是否需要刪除所選聯系人?', // 內容
        autoCancel: false, // 點擊遮障層時,是否關閉彈窗。
        alignment: DialogAlignment.Bottom, // 彈窗在豎直方向的對齊方式
        offset: { dx: 0, dy: -20 }, // 彈窗相對alignment位置的偏移量
        primaryButton: {
          value: '取消',
          action: () = > {
 console.info('Callback when the first button is clicked');
          }
        },
        secondaryButton: {
          value: '刪除',
          fontColor: '#D94838',
          action: () = > {
 console.info('Callback when the second button is clicked');
          }
        },
        cancel: () = > { // 點擊遮障層關閉dialog時的回調
 console.info('Closed callbacks');
        }
      }
    )
  })

此外,您還可以使用AlertDialog,構建只包含一個操作按鈕的確認彈窗,使用confirm響應操作按鈕回調。

AlertDialog.show(
  {
    title: '提示',
    message: '提示信息',
    autoCancel: true,
    alignment: DialogAlignment.Bottom,
    offset: { dx: 0, dy: -20 },
    confirm: {
      value: '確認',
      action: () = > {
 console.info('Callback when confirm button is clicked');
      }
    },
    cancel: () = > {
 console.info('Closed callbacks')
    }
  }
)

選擇類彈窗

選擇類彈窗用于方便用戶選擇相關數據,比如選擇喜歡吃的水果、出生日期等等。下面我們以TextPickerDialog和DatePickerDialog為例,來介紹選擇類彈窗的使用。

文本選擇彈窗

TextPickerDialog為文本滑動選擇器彈窗,根據指定的選擇范圍創建文本選擇器,展示在彈窗上,例如下面這段示例代碼使用TextPickerDialog實現了一個水果選擇彈窗。示例代碼中使用selected指定了彈窗的初始選擇項索引為2,對應的數據為“香蕉”。當用戶點擊“確定”操作按鈕后,會觸發onAccept事件回調,在回調中將選中的值,傳遞給宿主中的select變量。

@Entry
@Component
struct TextPickerDialogDemo {
 @State select: number = 2;
 private fruits: string[] = ['蘋果', '橘子', '香蕉', '獼猴桃', '西瓜'];
 
 build() {
 Column() {
      Button('TextPickerDialog')
        .margin(20)
        .onClick(() = > {
          TextPickerDialog.show({
 range: this.fruits, // 設置文本選擇器的選擇范圍
 selected: this.select, // 設置初始選中項的索引值。
 onAccept: (value: TextPickerResult) = > { // 點擊彈窗中的“確定”按鈕時觸發該回調。
 // 設置select為按下確定按鈕時候的選中項index,這樣當彈窗再次彈出時顯示選中的是上一次確定的選項
 this.select = value.index;
 console.info("TextPickerDialog:onAccept()" + JSON.stringify(value));
            },
 onCancel: () = > { // 點擊彈窗中的“取消”按鈕時觸發該回調。
 console.info("TextPickerDialog:onCancel()");
            },
 onChange: (value: TextPickerResult) = > { // 滑動彈窗中的選擇器使當前選中項改變時觸發該回調。
 console.info('TextPickerDialog:onChange()' + JSON.stringify(value));
            }
          })
        })
    }
    .width('100%')
  }
}

效果圖如下:

日期選擇彈窗

下面我們介紹另一種常用的選擇類彈窗DatePickerDialog,它是日期滑動選擇器彈窗,根據指定的日期范圍創建日期滑動選擇器,展示在彈窗上。DatePickerDialog的使用非常廣泛,比如當我們需要輸入個人出生日期的時候,就可以使用DatePickerDialog。下面的示例代碼實現了一個日期選擇彈窗:

@Entry
@Component
struct DatePickerDialogDemo {
 selectedDate: Date = new Date('2010-1-1');
 
 build() {
 Column() {
      Button("DatePickerDialog")
        .margin(20)
        .onClick(() = > {
          DatePickerDialog.show({
 start: new Date('1900-1-1'), // 設置選擇器的起始日期
 end: new Date('2023-12-31'), // 設置選擇器的結束日期
 selected: this.selectedDate, // 設置當前選中的日期
 lunar: false,
 onAccept: (value: DatePickerResult) = > { // 點擊彈窗中的“確定”按鈕時觸發該回調
 // 通過Date的setFullYear方法設置按下確定按鈕時的日期,這樣當彈窗再次彈出時顯示選中的是上一次確定的日期
 this.selectedDate.setFullYear(value.year, value.month, value.day)
 console.info('DatePickerDialog:onAccept()' + JSON.stringify(value))
            },
 onCancel: () = > { // 點擊彈窗中的“取消”按鈕時觸發該回調
 console.info('DatePickerDialog:onCancel()')
            },
 onChange: (value: DatePickerResult) = > { // 滑動彈窗中的滑動選擇器使當前選中項改變時觸發該回調
 console.info('DatePickerDialog:onChange()' + JSON.stringify(value))
            }
          })
        })
    }
    .width('100%')
  }
}

效果圖如下:

自定義彈窗

自定義彈窗的使用更加靈活,適用于更多的業務場景,在自定義彈窗中您可以自定義彈窗內容,構建更加豐富的彈窗界面。自定義彈窗的界面可以通過裝飾器@CustomDialog定義的組件來實現,然后結合CustomDialogController來控制自定義彈窗的顯示和隱藏。下面我們通過一個興趣愛好的選擇框來介紹自定義彈窗的使用。

從上面的效果圖可以看出,這個選擇框是一個多選的列表彈窗,我們可以使用裝飾器@CustomDialog,結合List組件來完成這個彈窗布局,實現步驟如下:

  1. 初始化彈窗數據。先準備好資源文件和數據實體類。其中資源文件stringarray.json創建在resources/base/element目錄下,文件根節點為strarray。
{
 "strarray": [
    {
 "name": "hobbies_data",
 "value": [
        {
 "value": "Soccer"
        },
        {
 "value": "Badminton"
        },
        {
 "value": "Travelling"
        },
        ... 
      ]
    }
  ]
}

實體類HobbyBean用來封裝自定義彈窗中的"興趣愛好"數據。

export default class HobbyBean {
 label: string;
 isChecked: boolean;
}

然后創建一個ArkTS文件CustomDialogWidget,用來封裝自定義彈窗,使用裝飾器@CustomDialog修飾CustomDialogWidget表示這是一個自定義彈窗。使用資源管理對象manager獲取數據,并將數據封裝到hobbyBeans。

@CustomDialog
export default struct CustomDialogWidget {
 @State hobbyBeans: HobbyBean[] = [];
 
 aboutToAppear() {
 let context: Context = getContext(this);
 let manager = context.resourceManager;
    manager.getStringArrayValue($r('app.strarray.hobbies_data'), (error, hobbyResult) = > {
      ...
      hobbyResult.forEach((hobbyItem: string) = > {
 let hobbyBean = new HobbyBean();
        hobbyBean.label = hobbyItem;
        hobbyBean.isChecked = false;
 this.hobbyBeans.push(hobbyBean);
      });
    });
  }
 
 build() {...}
}
  1. 創建彈窗組件。controller對象用于控制彈窗的控制和隱藏,hobbies表示彈窗選中的數據結果。setHobbiesValue方法用于篩選出被選中的數據,賦值給hobbies。
@CustomDialog
export default struct CustomDialogWidget {
 @State hobbyBeans: HobbyBean[] = [];
 @Link hobbies: string;
 private controller?: CustomDialogController;
 
 aboutToAppear() {...}
 
 setHobbiesValue(hobbyBeans: HobbyBean[]) {
 let hobbiesText: string = '';
    hobbiesText = hobbyBeans.filter((isCheckItem: HobbyBean) = >
    isCheckItem?.isChecked)
      .map((checkedItem: HobbyBean) = > {
 return checkedItem.label;
      }).join(',');
 this.hobbies = hobbiesText;
  }
 
 build() {
 Column() {
      Text($r('app.string.text_title_hobbies'))...
 List() {
        ForEach(this.hobbyBeans, (itemHobby: HobbyBean) = > {
 ListItem() {
 Row() {
              Text(itemHobby.label)...
              Toggle({ type: ToggleType.Checkbox, isOn: false })...
                .onChange((isCheck) = > {
                  itemHobby.isChecked = isCheck;
                })
            }
          }
        }, itemHobby = > itemHobby.label)
      }
 
 Row() {
        Button($r('app.string.cancel_button'))...
          .onClick(() = > {
 this.controller?.close();
          })
        Button($r('app.string.definite_button'))...
          .onClick(() = > {
 this.setHobbiesValue(this.hobbyBeans);
 this.controller?.close();
          })
      }
    }
  }
}
  1. 使用自定義彈窗。在自定義彈窗的使用頁面HomePage中先定義一個變量hobbies,使用裝飾器@State修飾,和自定義彈窗中的@Link 裝飾器修飾的變量進行雙向綁定。然后我們使用alignment和offset設置彈窗的位置在屏幕底部,并且距離底部20vp。最后我們在自定義組件TextCommonWidget(具體實現可以參考《構建多種樣式彈窗》Codelab源碼)的點擊事件中,調用customDialogController的open方法,用于顯示彈窗。
@Entry
@Component
struct HomePage {
 customDialogController: CustomDialogController = new CustomDialogController({
 builder: CustomDialogWidget({
 onConfirm: this.setHobbiesValue.bind(this),
    }),
 alignment: DialogAlignment.Bottom,
 customStyle: true,
 offset: { dx: 0,dy: -20 }
  });
 
 setHobbiesValue(hobbyArray: HobbyBean[]) {...}
 
 build() {
    ...
      TextCommonWidget({
        ...
 title: $r('app.string.title_hobbies'),
 content: $hobby,
 onItemClick: () = > {
 this.customDialogController.open();
        }
      })
    ...
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2388

    瀏覽量

    42964
  • OpenHarmony
    +關注

    關注

    25

    文章

    3744

    瀏覽量

    16473
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發ArkUI-X基礎知識:【ArkUI代碼工程及構建介紹】

    ArkUI作為OpenHarmony的默認開發框架,在本項目(ArkUI-X)中需要做到一套代碼同時支持多平臺構建,所以會采取共倉開發的方式,部分倉直接指向OpenHarmony相關開
    的頭像 發表于 05-25 16:45 ?2156次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>ArkUI</b>-X基礎知識:【<b class='flag-5'>ArkUI</b>代碼工程及構建介紹】

    鴻蒙開發ArkUI-X基礎知識:【ArkUI跨平臺設計總體說明】

    本文檔描述ArkUI開發框架跨平臺運行能力相關的總體技術方案。
    的頭像 發表于 05-24 15:41 ?1610次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>ArkUI</b>-X基礎知識:【<b class='flag-5'>ArkUI</b>跨平臺設計總體說明】

    鴻蒙ArkUI-X跨平臺技術:【開發準備】

    本文檔適用于ArkUI跨平臺應用開發的初學者。通過開發環境搭建、應用工程創建、編譯和運行,熟悉ArkUI跨平臺應用開發基本流程。
    的頭像 發表于 05-24 10:40 ?532次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺技術:【<b class='flag-5'>開發</b>準備】

    鴻蒙ArkUI-X框架開發:【開發準備】

    本文檔適用于ArkUI-X框架開發的初學者。通過環境搭建、代碼下載、代碼編譯、API擴展和使用,快速了解跨平臺項目開發流程。
    的頭像 發表于 05-23 21:02 ?505次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X框架<b class='flag-5'>開發</b>:【<b class='flag-5'>開發</b>準備】

    鴻蒙ArkUI-X跨平臺開發:【 編寫第一個ArkUI-X應用】

    通過構建一個簡單的ArkUI頁面跳轉示例,快速了解資源創建引用,路由代碼編寫和UI布局編寫等應用開發流程。
    的頭像 發表于 05-21 17:36 ?775次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺<b class='flag-5'>開發</b>:【 編寫第一個<b class='flag-5'>ArkUI</b>-X應用】

    鴻蒙ArkUI-X跨平臺開發:【SDK目錄結構介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發框架擴展到不同的OS平臺,比如Android和iOS平臺,讓開發者基于ArkUI
    的頭像 發表于 05-20 16:28 ?863次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺<b class='flag-5'>開發</b>:【SDK目錄結構介紹】

    鴻蒙ArkUI-X跨平臺開發:【 應用工程結構說明】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發框架擴展到不同的OS平臺,比如Android和iOS平臺,讓開發者基于ArkUI
    的頭像 發表于 05-19 21:05 ?639次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺<b class='flag-5'>開發</b>:【 應用工程結構說明】

    鴻蒙跨平臺框架:【ArkUi-X】創建工程

    鴻蒙推出了鴻ArkUi-X 框架所以就寫個文章分享一下
    的頭像 發表于 05-13 17:48 ?1029次閱讀
    <b class='flag-5'>鴻蒙</b>跨平臺框架:【<b class='flag-5'>ArkUi</b>-X】創建工程

    鴻蒙ArkUI:【從代碼到UI顯示的整體渲染流程】

    方舟開發框架(簡稱ArkUI)是鴻蒙開發的UI框架,提供如下兩種開發范式,我們 **只學聲明式開發
    的頭像 發表于 05-13 16:06 ?1004次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>:【從代碼到UI顯示的整體渲染流程】

    鴻蒙開發學習:初探【ArkUI-X】

    **簡單來說,ArkTS + ArkUI-X 對標的框架為 flutter,一次代碼,編譯為 native 全平臺運行**
    的頭像 發表于 05-13 15:58 ?1098次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>學習:初探【<b class='flag-5'>ArkUI</b>-X】

    HarmonyOS實戰開發-全局彈窗封裝案例

    這篇內容對學習鴻蒙開發有幫助,我想邀請大家幫我三個小忙: 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。 關注小編,同時可以期待后續文章ing?,不定期分享原創知識。 更多鴻蒙最新技術知識點,請關注作者博客:
    發表于 05-08 15:51

    HarmonyOS開發案例:【多種樣式彈窗

    如何使用彈窗功能,實現四種類型彈窗。分別是:警告彈窗、自定義彈窗、日期滑動選擇器彈窗、文本滑動選擇器彈窗
    的頭像 發表于 05-08 15:32 ?835次閱讀
    HarmonyOS<b class='flag-5'>開發</b>案例:【多種樣式<b class='flag-5'>彈窗</b>】

    HarmonyOS實戰開發-全局狀態保留能力彈窗

    // 全局狀態保留能力彈窗 模塊依賴 不涉及 最后 如果大家覺得這篇內容對學習鴻蒙開發有幫助,我想邀請大家幫我三個小忙: 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。 關注小編,同時可以
    發表于 05-07 14:53

    鴻蒙ArkUI開發學習:【渲染控制語法】

    ArkUI開發框架是一套構建 HarmonyOS / OpenHarmony 應用界面的聲明式UI開發框架,它支持程序使用?`if/else`?條件渲染,?`ForEach`?循環渲染以及?`LazyForEach`?懶加載渲染
    的頭像 發表于 04-09 16:40 ?1038次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b><b class='flag-5'>開發</b>學習:【渲染控制語法】

    鴻蒙ArkUI開發實戰:eTS版【笑話app】

    制作一款笑話app,使用ArkUI。
    的頭像 發表于 03-25 16:04 ?484次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b><b class='flag-5'>開發</b>實戰:eTS版【笑話app】
    主站蜘蛛池模板: 在线观看亚洲AV无码每日更新| 中国jjzz| 91精品国产品国语在线不卡| 精品国产福利一区二区在线| 亚洲黄色成人| 国产人妻XXXX精品HD电影| 天天射天天爱天天干| 国产99精品视频| 污漫日本E同人| 国产毛片A级久久久不卡精品| 小p孩玩成年女性啪啪资源| 亚洲91av| 国内九一激情白浆发布| 亚洲熟妇无码乱子AV电影| 久草在线草a免费线看| 在线视频中文字幕| 暖暖免费 高清 日本社区中文| 9久高清在线不卡免费无吗视频| 男人吃奶摸下弄进去好爽| S货SAO死你BL大点声叫BL| 日韩一区二区三区精品 | 动漫美女3d被爆漫画| 色琪琪无码成人AV视频| 国产日韩精品SUV| 一级片mp4| 欧美一区二区高清| 国产精品涩涩涩视频网站| 一本久道久久综合狠狠躁AV| 免费看美女的网站| 高h浪荡文辣文神奇宝贝| 亚洲欧美精品无码一区二在线| 快播h网站| 高h肉辣文黄蓉| 亚洲欧洲自拍偷拍| 女人张开腿让男人添| 国产精品嫩草影视在线观看| 伊人久久综在合线亚洲| 欧美性猛交AAA片| 国产午夜福利100集发布| 2020亚洲国产在线播放在线| 色欲AV亚洲午夜精品无码|