ts-methods-custom-dialog-box.md 7.9 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4
# 自定义弹窗<a name="ZH-CN_TOPIC_0000001237355055"></a>

>![](../../public_sys-resources/icon-note.gif) **说明:** 
>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
5 6 7 8 9 10 11 12 13

通过CustomDialogController类显示自定义弹窗。

## 接口<a name="section14945157165212"></a>

CustomDialogController\(value:\{builder: CustomDialog, cancel?: \(\) =\> void, autoCancel?: boolean\}\)

-   参数

Z
zengyawen 已提交
14
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="13.16%" id="mcps1.1.6.1.1"><p>参数名</p>
Z
zengyawen 已提交
15
    </th>
Z
zengyawen 已提交
16
    <th class="cellrowborder" valign="top" width="20.75%" id="mcps1.1.6.1.2"><p>参数类型</p>
Z
zengyawen 已提交
17
    </th>
Z
zengyawen 已提交
18
    <th class="cellrowborder" valign="top" width="5.680000000000001%" id="mcps1.1.6.1.3"><p>必填</p>
Z
zengyawen 已提交
19
    </th>
Z
zengyawen 已提交
20
    <th class="cellrowborder" valign="top" width="24.14%" id="mcps1.1.6.1.4"><p>默认值</p>
Z
zengyawen 已提交
21
    </th>
Z
zengyawen 已提交
22
    <th class="cellrowborder" valign="top" width="36.27%" id="mcps1.1.6.1.5"><p>参数描述</p>
Z
zengyawen 已提交
23 24 25
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
26
    <tbody><tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>builder</p>
Z
zengyawen 已提交
27
    </td>
Z
zengyawen 已提交
28
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p><a href="217.md">CustomDialog</a></p>
Z
zengyawen 已提交
29
    </td>
Z
zengyawen 已提交
30
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>是</p>
Z
zengyawen 已提交
31
    </td>
Z
zengyawen 已提交
32
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p>-</p>
Z
zengyawen 已提交
33
    </td>
Z
zengyawen 已提交
34
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>自定义弹窗内容构造器。</p>
Z
zengyawen 已提交
35 36
    </td>
    </tr>
Z
zengyawen 已提交
37
    <tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>cancel</p>
Z
zengyawen 已提交
38
    </td>
Z
zengyawen 已提交
39
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p>() =&gt; void</p>
Z
zengyawen 已提交
40
    </td>
Z
zengyawen 已提交
41
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
42
    </td>
Z
zengyawen 已提交
43
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p>-</p>
Z
zengyawen 已提交
44
    </td>
Z
zengyawen 已提交
45
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>点击遮障层退出时的回调。</p>
Z
zengyawen 已提交
46 47
    </td>
    </tr>
Z
zengyawen 已提交
48
    <tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>autoCancel</p>
Z
zengyawen 已提交
49
    </td>
Z
zengyawen 已提交
50
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p>boolean</p>
Z
zengyawen 已提交
51
    </td>
Z
zengyawen 已提交
52
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
53
    </td>
Z
zengyawen 已提交
54
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p>true</p>
Z
zengyawen 已提交
55
    </td>
Z
zengyawen 已提交
56
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>是否允许点击遮障层退出。</p>
Z
zengyawen 已提交
57 58
    </td>
    </tr>
Z
zengyawen 已提交
59
    <tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>alignment</p>
Z
zengyawen 已提交
60
    </td>
Z
zengyawen 已提交
61
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p><a href="#li46304184186">DialogAlignment</a></p>
Z
zengyawen 已提交
62
    </td>
Z
zengyawen 已提交
63
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
64
    </td>
Z
zengyawen 已提交
65
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p><a href="#li46304184186">DialogAlignment</a>.Default</p>
Z
zengyawen 已提交
66
    </td>
Z
zengyawen 已提交
67
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>弹窗在竖直方向上的对齐方式。</p>
Z
zengyawen 已提交
68 69
    </td>
    </tr>
Z
zengyawen 已提交
70
    <tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>offset</p>
Z
zengyawen 已提交
71
    </td>
Z
zengyawen 已提交
72 73 74 75
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p>{</p>
    <p>dx: Length | Resource,</p>
    <p>dy: Length  | Resource</p>
    <p>}</p>
Z
zengyawen 已提交
76
    </td>
Z
zengyawen 已提交
77
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
78
    </td>
Z
zengyawen 已提交
79
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p>-</p>
Z
zengyawen 已提交
80
    </td>
Z
zengyawen 已提交
81
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>弹窗相对alignment所在位置的偏移量。</p>
Z
zengyawen 已提交
82 83
    </td>
    </tr>
Z
zengyawen 已提交
84
    <tr><td class="cellrowborder" valign="top" width="13.16%" headers="mcps1.1.6.1.1 "><p>customStyle</p>
Z
zengyawen 已提交
85
    </td>
Z
zengyawen 已提交
86
    <td class="cellrowborder" valign="top" width="20.75%" headers="mcps1.1.6.1.2 "><p>boolean</p>
Z
zengyawen 已提交
87
    </td>
Z
zengyawen 已提交
88
    <td class="cellrowborder" valign="top" width="5.680000000000001%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
89
    </td>
Z
zengyawen 已提交
90
    <td class="cellrowborder" valign="top" width="24.14%" headers="mcps1.1.6.1.4 "><p>false</p>
Z
zengyawen 已提交
91
    </td>
Z
zengyawen 已提交
92
    <td class="cellrowborder" valign="top" width="36.27%" headers="mcps1.1.6.1.5 "><p>弹窗容器样式是否自定义。</p>
Z
zengyawen 已提交
93 94 95 96 97 98 99
    </td>
    </tr>
    </tbody>
    </table>

-   <a name="li46304184186"></a>DialogAlignment枚举说明

Z
zengyawen 已提交
100
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25.2%" id="mcps1.1.3.1.1"><p>名称</p>
Z
zengyawen 已提交
101
    </th>
Z
zengyawen 已提交
102
    <th class="cellrowborder" valign="top" width="74.8%" id="mcps1.1.3.1.2"><p>描述</p>
Z
zengyawen 已提交
103 104 105
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
106
    <tbody><tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Top</p>
Z
zengyawen 已提交
107
    </td>
Z
zengyawen 已提交
108
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>垂直顶部对齐。</p>
Z
zengyawen 已提交
109 110
    </td>
    </tr>
Z
zengyawen 已提交
111
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Center</p>
Z
zengyawen 已提交
112
    </td>
Z
zengyawen 已提交
113
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>垂直居中对齐。</p>
Z
zengyawen 已提交
114 115
    </td>
    </tr>
Z
zengyawen 已提交
116
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Bottom</p>
Z
zengyawen 已提交
117
    </td>
Z
zengyawen 已提交
118
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>垂直底部对齐。</p>
Z
zengyawen 已提交
119 120
    </td>
    </tr>
Z
zengyawen 已提交
121
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Default</p>
Z
zengyawen 已提交
122
    </td>
Z
zengyawen 已提交
123
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>默认对齐。</p>
Z
zengyawen 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
    </td>
    </tr>
    </tbody>
    </table>


### CustomDialogController<a name="section8664549161612"></a>

创建对象

```
dialogController : CustomDialogController = new CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean})
```

open\(\)

显示自定义弹窗内容,若已显示,则不生效。

close\(\)

关闭显示的自定义弹窗,若已关闭,则不生效。

## 示例<a name="section1033712576815"></a>

```
@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController
  cancel: () => void
  confirm: () => void

  build() {
    Column() {
      Text('Software uninstall').width('70%').fontSize(20).margin({ top: 10, bottom: 10 })
      Image($r('app.media.icon')).width(80).height(80)
      Text('Whether to uninstall a software?').fontSize(16).margin({ bottom: 10 })
      Flex({ justifyContent: FlexAlign.SpaceAround }) {
        Button('cancel')
          .onClick(() => {
            this.controller.close()
            this.cancel()
          }).backgroundColor(0xffffff).fontColor(Color.Black)
        Button('confirm')
          .onClick(() => {
            this.controller.close()
            this.confirm()
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}

@Entry
@Component
struct CustomDialogUser {
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({ cancel: this.onCancel, confirm: this.onAccept }),
    cancel: this.existApp,
    autoCancel: true
  })

  onCancel() {
    console.info('Callback when the first button is clicked')
  }
  onAccept() {
    console.info('Callback when the second button is clicked')
  }
  existApp() {
    console.info('Click the callback in the blank area')
  }

  build() {
    Column() {
      Button('click me')
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}
```

![](figures/customdialog.gif)