自定義彈窗(CustomDialog)

2024-01-25 13:16 更新

自定義彈窗(CustomDialog)可用于廣告、中獎、警告、軟件更新等與用戶交互響應操作。開發(fā)者可以通過CustomDialogController類顯示自定義彈窗。具體用法請參考自定義彈窗

創(chuàng)建自定義彈窗

  1. 使用@CustomDialog裝飾器裝飾自定義彈窗。
  2. @CustomDialog裝飾器用于裝飾自定義彈框,此裝飾器內(nèi)進行自定義內(nèi)容(也就是彈框內(nèi)容)。

    1. @CustomDialog
    2. struct CustomDialogExample {
    3. controller: CustomDialogController
    4. build() {
    5. Column() {
    6. Text('我是內(nèi)容')
    7. .fontSize(20)
    8. .margin({ top: 10, bottom: 10 })
    9. }
    10. }
    11. }

  3. 創(chuàng)建構(gòu)造器,與裝飾器呼應相連。

    1. dialogController: CustomDialogController = new CustomDialogController({
    2. builder: CustomDialogExample({}),
    3. })

  4. 點擊與onClick事件綁定的組件使彈窗彈出

    1. Flex({justifyContent:FlexAlign.Center}){
    2. Button('click me')
    3. .onClick(() => {
    4. this.dialogController.open()
    5. })
    6. }.width('100%')

彈窗的交互

彈窗可用于數(shù)據(jù)交互,完成用戶一系列響應操作。

  1. 在@CustomDialog裝飾器內(nèi)添加按鈕操作,同時添加數(shù)據(jù)函數(shù)的創(chuàng)建。

    1. @CustomDialog
    2. struct CustomDialogExample {
    3. controller: CustomDialogController
    4. cancel: () => void
    5. confirm: () => void
    6. build() {
    7. Column() {
    8. Text('我是內(nèi)容').fontSize(20).margin({ top: 10, bottom: 10 })
    9. Flex({ justifyContent: FlexAlign.SpaceAround }) {
    10. Button('cancel')
    11. .onClick(() => {
    12. this.controller.close()
    13. this.cancel()
    14. }).backgroundColor(0xffffff).fontColor(Color.Black)
    15. Button('confirm')
    16. .onClick(() => {
    17. this.controller.close()
    18. this.confirm()
    19. }).backgroundColor(0xffffff).fontColor(Color.Red)
    20. }.margin({ bottom: 10 })
    21. }
    22. }
    23. }

  2. 頁面內(nèi)需要在構(gòu)造器內(nèi)進行接收,同時創(chuàng)建相應的函數(shù)操作。

    1. dialogController: CustomDialogController = new CustomDialogController({
    2. builder: CustomDialogExample({
    3. cancel: this.onCancel,
    4. confirm: this.onAccept,
    5. }),
    6. alignment: DialogAlignment.Default, // 可設(shè)置dialog的對齊方式,設(shè)定顯示在底部或中間等,默認為底部顯示
    7. })
    8. onCancel() {
    9. console.info('Callback when the first button is clicked')
    10. }
    11. onAccept() {
    12. console.info('Callback when the second button is clicked')
    13. }

完整示例

  1. // xxx.ets
  2. @CustomDialog
  3. struct CustomDialogExample {
  4. controller: CustomDialogController
  5. cancel: () => void
  6. confirm: () => void
  7. build() {
  8. Column() {
  9. Text('我是內(nèi)容').fontSize(20).margin({ top: 10, bottom: 10 })
  10. Flex({ justifyContent: FlexAlign.SpaceAround }) {
  11. Button('cancel')
  12. .onClick(() => {
  13. this.controller.close()
  14. this.cancel()
  15. }).backgroundColor(0xffffff).fontColor(Color.Black)
  16. Button('confirm')
  17. .onClick(() => {
  18. this.controller.close()
  19. this.confirm()
  20. }).backgroundColor(0xffffff).fontColor(Color.Red)
  21. }.margin({ bottom: 10 })
  22. }
  23. }
  24. }
  25. @Entry
  26. @Component
  27. struct DialogExample {
  28. dialogController: CustomDialogController = new CustomDialogController({
  29. builder: CustomDialogExample({
  30. cancel: this.onCancel,
  31. confirm: this.onAccept,
  32. }),
  33. alignment: DialogAlignment.Default, // 可設(shè)置dialog的對齊方式,設(shè)定顯示在底部或中間等,默認為底部顯示
  34. })
  35. onCancel() {
  36. console.info('Callback when the first button is clicked')
  37. }
  38. onAccept() {
  39. console.info('Callback when the second button is clicked')
  40. }
  41. build() {
  42. Flex({ justifyContent: FlexAlign.Center }) {
  43. Button('click me')
  44. .onClick(() => {
  45. this.dialogController.open()
  46. })
  47. }.width('100%')
  48. }
  49. }

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號