• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 自定义弹窗
2
3
4自定义弹窗CustomDialog可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考[自定义弹窗](../reference/arkui-ts/ts-methods-custom-dialog-box.md)。
5
6
7## 创建自定义弹窗
8
91. 使用\@CustomDialog装饰器装饰自定义弹窗。
10
112. \@CustomDialog装饰器用于装饰自定义弹框,此装饰器内进行自定义内容(也就是弹框内容)。
12
13   ```ts
14   @CustomDialog
15   struct CustomDialogExample {
16     controller: CustomDialogController
17     build() {
18       Column() {
19         Text('我是内容')
20         .fontSize(20)
21         .margin({ top: 10, bottom: 10 })
22       }
23     }
24   }
25   ```
26
273. 创建构造器,与装饰器呼应相连。
28
29   ```ts
30   dialogController: CustomDialogController = new CustomDialogController({
31       builder: CustomDialogExample({}),
32   })
33   ```
34
354. 点击与onClick事件绑定的组件使弹窗弹出
36
37   ```ts
38   Flex({justifyContent:FlexAlign.Center}){
39     Button('click me')
40       .onClick(() => {
41         this.dialogController.open()
42       })
43   }.width('100%')
44   ```
45
46   ![zh-cn_image_0000001562700493](figures/zh-cn_image_0000001562700493.png)
47
48
49## 弹窗的交互
50
51弹窗可用于数据交互,完成用户一系列响应操作。
52
53
541. 在\@CustomDialog装饰器内添加按钮操作,同时添加数据函数的创建。
55
56   ```ts
57   @CustomDialog
58   struct CustomDialogExample {
59     controller: CustomDialogController
60     cancel: () => void
61     confirm: () => void
62     build() {
63       Column() {
64         Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 })
65         Flex({ justifyContent: FlexAlign.SpaceAround }) {
66           Button('cancel')
67             .onClick(() => {
68               this.controller.close()
69               this.cancel()
70             }).backgroundColor(0xffffff).fontColor(Color.Black)
71           Button('confirm')
72             .onClick(() => {
73               this.controller.close()
74               this.confirm()
75             }).backgroundColor(0xffffff).fontColor(Color.Red)
76         }.margin({ bottom: 10 })
77       }
78     }
79   }
80   ```
81
822. 页面内需要在构造器内进行接收,同时创建相应的函数操作。
83
84   ```ts
85   dialogController: CustomDialogController = new CustomDialogController({
86       builder: CustomDialogExample({
87         cancel: this.onCancel,
88         confirm: this.onAccept,
89       }),
90       alignment: DialogAlignment.Default,  // 可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示
91     })
92     onCancel() {
93       console.info('Callback when the first button is clicked')
94     }
95     onAccept() {
96       console.info('Callback when the second button is clicked')
97     }
98   ```
99
100   ![zh-cn_image_0000001511421320](figures/zh-cn_image_0000001511421320.png)
101