• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#  弹出框 (Dialog)
2
3
4弹出框是一种模态窗口,通常用于在保持当前的上下文环境时,临时展示用户需关注的信息或待处理的操作,用户在模态弹出框内完成上述交互任务。模态弹出框需要用户进行交互才能够退出模态模式。
5
6
7> **说明:**
8>
9> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
10
11
12## 导入模块
13
14```
15import { TipsDialog, SelectDialog, ConfirmDialog, AlertDialog, LoadingDialog, CustomContentDialog } from '@kit.ArkUI'
16```
17
18
19## 子组件
20
2122
23## 属性
24
25不支持[通用属性](ts-component-general-attributes.md)。
26
27## TipsDialog
28
29
30TipsDialog({controller: CustomDialogController, imageRes: Resource, imageSize?: SizeOptions, title?: ResourceStr, content?: ResourceStr, checkTips?: ResourceStr, ischecked?: boolean, checkAction?: (isChecked: boolean) => void, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions})
31
32
33提示弹出框,即为带图形确认框,必要时可通过图形化方式展现确认框。
34
35
36**装饰器类型:**\@CustomDialog
37
38
39**系统能力:** SystemCapability.ArkUI.ArkUI.Full
40
41| 名称                          | 类型                                                         | 必填 | 装饰器类型 | 说明                                                         |
42| ----------------------------- | ------------------------------------------------------------ | ---- | ---------- | ------------------------------------------------------------ |
43| controller                    | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | -          | 提示弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
44| imageRes                      | [ResourceStr<sup>12+</sup>](ts-types.md#resourcestr) \| [PixelMap<sup>12+</sup>](../../apis-image-kit/js-apis-image.md#pixelmap7) | 是   | -          | 展示的图片。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
45| imageSize                     | [SizeOptions](ts-types.md#sizeoptions)                       | 否   | -          | 自定义图片尺寸。<br/>默认值:64*64vp<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
46| title                         | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -          | 提示弹出框标题。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
47| content                       | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -          | 提示弹出框内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
48| checkTips                     | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -          | checkbox的提示内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
49| isChecked                     | boolean                                                      | 否   | \@Prop     | value为true时,表示checkbox已选中,value为false时,表示未选中。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
50| checkAction<sup>12+</sup>     | (isChecked: boolean) => void                                 | 否   | -          | 现推荐使用 onCheckedChange<sup>12+</sup>。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
51| onCheckedChange<sup>12+</sup> | Callback\<boolean>                                           | 否   | -          | checkbox的选中状态改变事件。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
52| primaryButton                 | [ButtonOptions](#buttonoptions)                              | 否   | -          | 提示框左侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
53| secondaryButton               | [ButtonOptions](#buttonoptions)                              | 否   | -          | 提示框右侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
54| theme<sup>12+</sup>           | [Theme](../js-apis-arkui-theme.md#theme) \| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | -          | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
55| themeColorMode<sup>12+</sup>  | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | -     | 自定义弹窗深浅色模式。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                 |
56
57## SelectDialog
58
59SelectDialog({controller: CustomDialogController, title: ResourceStr, content?: ResourceStr, selectedIndex?: number, confirm?: ButtonOptions, radioContent: Array&lt;SheetInfo&gt;})
60
61选择类弹出框,弹框中以列表或网格的形式提供可选的内容。
62
63**装饰器类型:**\@CustomDialog
64
65**系统能力:** SystemCapability.ArkUI.ArkUI.Full
66
67| 名称                | 类型                                                         | 必填 | 说明                                                         |
68| ------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
69| controller          | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | 选择弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
70| title               | [ResourceStr](ts-types.md#resourcestr)                       | 是   | 选择弹出框标题。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
71| content             | [ResourceStr](ts-types.md#resourcestr)                       | 否   | 选择弹出框内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
72| selectedIndex       | number                                                       | 否   | 选择弹出框的选中项。<br/>取值范围:大于等于-1的整数。<br/>默认值:-1,没有选中项。若设置数值小于-1,按没有选中项处理。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
73| confirm             | [ButtonOptions](#buttonoptions)                              | 否   | 选择弹出框底部按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
74| radioContent        | Array&lt;[SheetInfo](ts-methods-action-sheet.md#sheetinfo对象说明)&gt; | 是   | 选择弹出框的子项内容列表,每个选择项支持设置文本和选中的回调事件。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
75| theme<sup>12+</sup> | [Theme](../js-apis-arkui-theme.md#theme) \| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
76| themeColorMode<sup>12+</sup> | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | 自定义弹窗深浅色模式。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                       |
77
78## ConfirmDialog
79
80ConfirmDialog({controller: CustomDialogController, title: ResourceStr, content?: ResourceStr, checkTips?: ResourceStr, ischecked?: boolean, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions})
81
82信息确认类弹出框,操作未正确执行(如网络错误、电池电量过低),或未正确操作时(如指纹录入),反馈的错误或提示信息。
83
84**装饰器类型:**\@CustomDialog
85
86**系统能力:** SystemCapability.ArkUI.ArkUI.Full
87
88| 名称                          | 类型                                                         | 必填 | 装饰器类型 | 说明                                                         |
89| ----------------------------- | ------------------------------------------------------------ | ---- | ---------- | ------------------------------------------------------------ |
90| controller                    | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | -          | 确认弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
91| title                         | [ResourceStr](ts-types.md#resourcestr)                       | 是   | -          | 确认弹出框标题。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
92| content                       | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -          | 确认弹出框内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
93| checkTips                     | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -          | checkbox的提示内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
94| isChecked                     | boolean                                                      | 否   | \@Prop     | value为true时,表示checkbox已选中,value为false时,表示未选中。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
95| onCheckedChange<sup>12+</sup> | Callback\<boolean>                                           | 否   | -          | checkbox的选中状态改变事件。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
96| primaryButton                 | [ButtonOptions](#buttonoptions)                              | 否   | -          | 确认框左侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
97| secondaryButton               | [ButtonOptions](#buttonoptions)                              | 否   | -          | 确认框右侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
98| theme<sup>12+</sup>           | [Theme](../js-apis-arkui-theme.md#theme)\| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | -          | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
99| themeColorMode<sup>12+</sup>  | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | -     | 自定义弹窗深浅色模式。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                 |
100
101
102## AlertDialog
103
104AlertDialog({controller: CustomDialogController, primaryTitle?: ResourceStr, secondaryTitle?: ResourceStr, content: ResourceStr, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions})
105
106操作确认类弹出框,触发一个将产生严重后果的不可逆操作时,如删除、重置、取消编辑、停止等。
107
108**装饰器类型:**\@CustomDialog
109
110**系统能力:** SystemCapability.ArkUI.ArkUI.Full
111
112| 名称                         | 类型                                                         | 必填 | 说明                                                         |
113| ---------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
114| controller                   | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | 确认弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
115| primaryTitle<sup>12+</sup>   | [ResourceStr](ts-types.md#resourcestr)                       | 否   | 确认框一级标题。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
116| secondaryTitle<sup>12+</sup> | [ResourceStr](ts-types.md#resourcestr)                       | 否   | 确认框二级标题。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
117| content                      | [ResourceStr](ts-types.md#resourcestr)                       | 是   | 确认弹出框内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
118| primaryButton                | [ButtonOptions](#buttonoptions)                              | 否   | 确认框左侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
119| secondaryButton              | [ButtonOptions](#buttonoptions)                              | 否   | 确认框右侧按钮。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
120| theme<sup>12+</sup>          | [Theme](../js-apis-arkui-theme.md#theme) \| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
121| themeColorMode<sup>12+</sup> | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | 自定义弹窗深浅色模式。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
122
123
124## LoadingDialog
125
126LoadingDialog({controller: CustomDialogController, content?: ResourceStr})
127
128进度加载类弹出框,操作正在执行时的提示信息。
129
130**装饰器类型:**\@CustomDialog
131
132**系统能力:** SystemCapability.ArkUI.ArkUI.Full
133
134| 名称                | 类型                                                         | 必填 | 说明                                                         |
135| ------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
136| Controller         | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | 加载弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
137| content             | [ResourceStr](ts-types.md#resourcestr)                       | 否   | 加载弹出框内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
138| theme<sup>12+</sup> | [Theme](../js-apis-arkui-theme.md#theme)\| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
139| themeColorMode<sup>12+</sup> | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | 自定义弹窗深浅色模式。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
140
141
142## CustomContentDialog<sup>12+</sup>
143
144CustomContentDialog({controller: CustomDialogController, contentBuilder: () => void, primaryTitle?: ResourceStr, secondaryTitle?: ResourceStr, contentAreaPadding?: Padding, buttons?: ButtonOptions[]})
145
146自定义内容区弹出框,同时支持定义操作区按钮样式。
147
148**装饰器类型:**\@CustomDialog
149
150**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
151
152**系统能力:** SystemCapability.ArkUI.ArkUI.Full
153
154| 名称                | 类型                                                     | 必填 | 装饰器类型 | 说明                                                         |
155| ------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
156| controller          | [CustomDialogController](ts-methods-custom-dialog-box.md#customdialogcontroller) | 是 | -  | 弹出框控制器。<br/>**说明:** 未使用@Require装饰,构造时不强制校验参数。                                               |
157| contentBuilder      | () => void                                                   | 是   | @BuilderParam | 弹出框内容。                                                 |
158| primaryTitle        | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -  | 弹出框标题。                                                 |
159| secondaryTitle      | [ResourceStr](ts-types.md#resourcestr)                       | 否   | -  | 弹出框辅助文本。                                             |
160| localizedContentAreaPadding | [LocalizedPadding](ts-types.md#LocalizedPadding)     | 否   | -  | 弹出框内容区内边距。                                         |
161| contentAreaPadding  | [Padding](ts-types.md#padding)                               | 否   | -  | 弹出框内容区内边距。设置了localizedContentAreaPadding属性时该属性不生效。|
162| buttons             | [ButtonOptions](#buttonoptions)[]                     | 否   | -  | 弹出框操作区按钮,最多支持4个按钮。                          |
163| theme | [Theme](../js-apis-arkui-theme.md#theme) \| [CustomTheme](../js-apis-arkui-theme.md#customtheme) | 否   | -  | 主题信息,可以是CustomTheme或从onWillApplyTheme中获取的Theme实例。 |
164| themeColorMode | [ThemeColorMode](ts-container-with-theme.md#themecolormode10枚举说明) | 否 | - | 自定义弹窗深浅色模式。 |
165
166
167## PopoverDialog<sup>14+</sup>
168
169PopoverDialog({visible: boolean, popover: PopoverOptions, targetBuilder: Callback\<void>})
170
171跟手弹窗,基于目标组件位置弹出,上文中的TipsDialog、SelectDialog、ConfirmDialog、AlertDialog、LoadingDialog、CustomContentDialog都可作为弹窗内容。
172
173**装饰器类型:**\@Component
174
175**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
176
177**系统能力:** SystemCapability.ArkUI.ArkUI.Full
178
179| 名称 | 类型 | 必填 | 装饰器类型 | 说明 |
180| -------- | -------- | -------- | -------- | -------- |
181| visible | boolean | 是 | \@Link | 跟手弹出框显示状态。<br/>默认值为false,隐藏弹窗。 |
182| popover | [PopoverOptions](#popoveroptions14) | 是 | \@Prop<br/>\@Require | 配置跟手弹窗的参数。 |
183| targetBuilder | Callback\<void> | 是 | \@Require<br/>\@BuilderParam | 跟手弹出框基于的目标组件。 |
184
185
186## ButtonOptions
187
188**系统能力:** SystemCapability.ArkUI.ArkUI.Full
189
190| 名称                      | 类型                                                         | 必填 | 说明                                                         |
191| ------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
192| value                     | [ResourceStr](ts-types.md#resourcestr)                       | 是   | 按钮的内容。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
193| action                    | ()&nbsp;=&gt;&nbsp;void                                      | 否   | 按钮的点击事件。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
194| background                | [ResourceColor](ts-types.md#resourcecolor)                   | 否   | 按钮的背景。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
195| fontColor                 | [ResourceColor](ts-types.md#resourcecolor)                   | 否   | 按钮的字体颜色。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
196| buttonStyle<sup>12+</sup> | [ButtonStyleMode](ts-basic-components-button.md#buttonstylemode11枚举说明) | 否   | 按钮的样式。<br/>默认值:2in1设备为ButtonStyleMode.NORMAL,其他设备为ButtonStyleMode.TEXTUAL。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
197| role<sup>12+</sup>        | [ButtonRole](ts-basic-components-button.md#buttonrole12枚举说明) | 否   | 按钮的角色。<br/>默认值:ButtonRole.NORMAL。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
198
199>  **说明:**
200>
201>  buttonStyle和role优先级高于fontColor和background。如果buttonStyle和role设置的是默认值,那么fontColor和background可生效。
202
203## PopoverOptions<sup>14+</sup>
204
205跟手弹窗参数,用于设置弹窗内容、位置属性等。
206
207继承自[CustomPopupOptions](../arkui-ts/ts-universal-attributes-popup.md#custompopupoptions8类型说明)。
208
209> **说明:**
210>
211> radius默认值为32vp。
212
213**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
214
215**系统能力:** SystemCapability.ArkUI.ArkUI.Full
216
217## 事件
218
219不支持[通用事件](ts-component-general-events.md)。
220
221## 示例
222
223### 示例1(上图下文弹出框)
224上图下文弹出框,包含imageRes、content等内容。
225
226```ts
227import { TipsDialog } from '@kit.ArkUI';
228
229@Entry
230@Component
231struct Index {
232  dialogControllerImage: CustomDialogController = new CustomDialogController({
233    builder: TipsDialog({
234      imageRes: $r('sys.media.ohos_ic_public_voice'),
235      content: '想要卸载这个APP嘛?',
236      primaryButton: {
237        value: '取消',
238        action: () => {
239          console.info('Callback when the first button is clicked')
240        },
241      },
242      secondaryButton: {
243        value: '删除',
244        role: ButtonRole.ERROR,
245        action: () => {
246          console.info('Callback when the second button is clicked')
247        }
248      },
249      onCheckedChange: () => {
250        console.info('Callback when the checkbox is clicked')
251      }
252    }),
253  })
254
255  build() {
256    Row() {
257      Stack() {
258        Column(){
259          Button("上图下文弹出框")
260            .width(96)
261            .height(40)
262            .onClick(() => {
263              this.dialogControllerImage.open()
264            })
265        }.margin({bottom: 300})
266      }.align(Alignment.Bottom)
267      .width('100%').height('100%')
268    }
269    .backgroundImageSize({ width: '100%', height: '100%' })
270    .height('100%')
271  }
272}
273```
274
275![TipsDialog](figures/TipsDialog.png)
276
277### 示例2(纯列表弹出框)
278纯列表弹出框,包含selectedIndex、radioContent等内容。
279
280```ts
281import { SelectDialog } from '@kit.ArkUI'
282
283@Entry
284@Component
285struct Index {
286  // 设置默认选中radio的index
287  radioIndex = 0;
288  dialogControllerList: CustomDialogController = new CustomDialogController({
289    builder: SelectDialog({
290      title: '文本标题',
291      selectedIndex: this.radioIndex,
292      confirm: {
293        value: '取消',
294        action: () => {},
295      },
296      radioContent: [
297        {
298          title: '文本文本文本文本文本',
299          action: () => {
300            this.radioIndex = 0
301          }
302        },
303        {
304          title: '文本文本文本文本',
305          action: () => {
306            this.radioIndex = 1
307          }
308        },
309        {
310          title: '文本文本文本文本',
311          action: () => {
312            this.radioIndex = 2
313          }
314        },
315      ]
316    }),
317  })
318
319  build() {
320    Row() {
321      Stack() {
322        Column() {
323          Button("纯列表弹出框")
324            .width(96)
325            .height(40)
326            .onClick(() => {
327              this.dialogControllerList.open()
328            })
329        }.margin({ bottom: 300 })
330      }
331      .align(Alignment.Bottom)
332      .width('100%')
333      .height('100%')
334    }
335    .backgroundImageSize({ width: '100%', height: '100%' })
336    .height('100%')
337  }
338}
339```
340
341![SelectDialog](figures/SelectDialog.png)
342
343### 示例3(文本与勾选弹出框)
344文本与勾选弹出框,包含content、checkTips等内容。
345
346```ts
347import { ConfirmDialog } from '@kit.ArkUI'
348
349@Entry
350@Component
351struct Index {
352  isChecked = false;
353  dialogControllerCheckBox: CustomDialogController = new CustomDialogController({
354    builder: ConfirmDialog({
355      title: '文本标题',
356      content: '文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本',
357      // 勾选框选中状态
358      isChecked: this.isChecked,
359      // 勾选框说明文本
360      checkTips: '禁止后不再提示',
361      primaryButton: {
362        value: '禁止',
363        action: () => {},
364      },
365      secondaryButton: {
366        value: '允许',
367        action: () => {
368          this.isChecked = false
369          console.info('Callback when the second button is clicked')
370        }
371      },
372      onCheckedChange: () => {
373        console.info('Callback when the checkbox is clicked')
374      },
375    }),
376    autoCancel: true,
377    alignment: DialogAlignment.Bottom
378  })
379
380  build() {
381    Row() {
382      Stack() {
383        Column(){
384          Button("文本+勾选弹出框")
385            .width(96)
386            .height(40)
387            .onClick(() => {
388              this.dialogControllerCheckBox.open()
389            })
390        }
391        .margin({bottom: 300})
392      }
393      .align(Alignment.Bottom)
394      .width('100%')
395      .height('100%')
396    }
397    .backgroundImageSize({ width: '100%', height: '100%' })
398    .height('100%')
399  }
400}
401```
402
403![2024-06-03](figures/2024-06-03_150422.png)
404
405### 示例4(纯文本弹出框)
406纯文本弹出框,包含primaryTitle、secondaryTitle、content等内容。
407
408```ts
409import { AlertDialog } from '@kit.ArkUI'
410
411@Entry
412@Component
413struct Index {
414  dialogControllerConfirm: CustomDialogController = new CustomDialogController({
415    builder: AlertDialog({
416      primaryTitle: '弹框一级标题',
417      secondaryTitle: '弹框二级标题',
418      content: '文本文本文本文本文本',
419      primaryButton: {
420        value: '取消',
421        action: () => {
422        },
423      },
424      secondaryButton: {
425        value: '确认',
426        role: ButtonRole.ERROR,
427        action: () => {
428          console.info('Callback when the second button is clicked')
429        }
430      },
431    }),
432  })
433
434  build() {
435    Row() {
436      Stack() {
437        Column() {
438          Button("纯文本弹出框")
439            .width(96)
440            .height(40)
441            .onClick(() => {
442              this.dialogControllerConfirm.open()
443            })
444        }
445        .margin({ bottom: 300 })
446      }
447      .align(Alignment.Bottom)
448      .width('100%')
449      .height('100%')
450    }
451    .backgroundImageSize({ width: '100%', height: '100%' })
452    .height('100%')
453  }
454}
455```
456
457![AlertDialog](figures/AlertDialog.png)
458
459### 示例5(进度条弹出框)
460进度条弹出框,包含content等内容。
461
462```ts
463import { LoadingDialog } from '@kit.ArkUI'
464
465@Entry
466@Component
467struct Index {
468  dialogControllerProgress: CustomDialogController = new CustomDialogController({
469    builder: LoadingDialog({
470      content: '文本文本文本文本文本...',
471    }),
472  })
473
474  build() {
475    Row() {
476      Stack() {
477        Column() {
478          Button("进度条弹出框")
479            .width(96)
480            .height(40)
481            .onClick(() => {
482              this.dialogControllerProgress.open()
483            })
484        }
485        .margin({ bottom: 300 })
486      }
487      .align(Alignment.Bottom)
488      .width('100%')
489      .height('100%')
490    }
491    .backgroundImageSize({ width: '100%', height: '100%' })
492    .height('100%')
493  }
494}
495```
496
497![LoadingDialog](figures/LoadingDialog.gif)
498
499### 示例6(自定义主题风格弹出框)
500自定义主题风格弹出框,包含content、theme等内容。
501
502```ts
503import { CustomColors, CustomTheme, LoadingDialog } from '@kit.ArkUI'
504
505class CustomThemeImpl implements CustomTheme {
506  colors?: CustomColors;
507
508  constructor(colors: CustomColors) {
509    this.colors = colors;
510  }
511}
512
513// 自定义内容文字及loading组件主题颜色
514class CustomThemeColors implements CustomColors {
515  fontPrimary = '#ffd0a300';
516  iconSecondary = '#ffd000cd';
517}
518
519@Entry
520@Component
521struct Index {
522  @State customTheme: CustomTheme = new CustomThemeImpl(new CustomThemeColors());
523  dialogController: CustomDialogController = new CustomDialogController({
524    builder: LoadingDialog({
525      content: 'text',
526      theme: this.customTheme,
527    })
528  });
529
530  build() {
531    Row() {
532      Stack() {
533        Column() {
534          Button('dialog')
535            .width(96)
536            .height(40)
537            .onClick(() => {
538              this.dialogController.open();
539            })
540        }
541        .margin({ bottom: 300 })
542      }
543      .align(Alignment.Bottom)
544      .width('100%')
545      .height('100%')
546    }
547    .backgroundImageSize({ width: '100%', height: '100%' })
548    .height('100%')
549  }
550}
551```
552
553![loading_dialog_with_theme](figures/advanced_dialog_loading_dialog_with_theme.png)
554
555### 示例7(自定义深浅色模式弹出框)
556自定义深浅色模式弹出框,包含content、themeColorMode等内容。
557
558```ts
559import { LoadingDialog } from '@kit.ArkUI'
560
561@Entry
562@Component
563struct Index {
564  dialogController: CustomDialogController = new CustomDialogController({
565    builder: LoadingDialog({
566      content: 'Text',
567      themeColorMode: ThemeColorMode.DARK, //设置弹窗深浅色模式为深色模式
568    })
569  });
570
571  build() {
572    Row() {
573      Stack() {
574        Column() {
575          Button('Dialog')
576            .width(96)
577            .height(40)
578            .onClick(() => {
579              this.dialogController.open();
580            })
581        }
582        .margin({ bottom: 300 })
583      }
584      .align(Alignment.Bottom)
585      .width('100%')
586      .height('100%')
587    }
588    .backgroundImageSize({ width: '100%', height: '100%' })
589    .height('100%')
590  }
591}
592```
593
594![loading_dialog_with_colorMode](figures/advanced_dialog_loading_dialog_with_colorMode.png)
595
596### 示例8(自定义内容弹出框)
597支持自定义内容弹出框,包含contentBuilder、buttons等内容。
598
599```ts
600import { CustomContentDialog } from '@kit.ArkUI'
601
602@Entry
603@Component
604struct Index {
605  dialogController: CustomDialogController = new CustomDialogController({
606    builder: CustomContentDialog({
607      primaryTitle: '标题',
608      secondaryTitle: '辅助文本',
609      contentBuilder: () => {
610        this.buildContent();
611      },
612      buttons: [
613        {
614          value: '按钮1',
615          buttonStyle: ButtonStyleMode.TEXTUAL,
616          action: () => {
617            console.info('Callback when the button is clicked')
618          }
619        },
620        {
621          value: '按钮2',
622          buttonStyle: ButtonStyleMode.TEXTUAL,
623          role: ButtonRole.ERROR
624        }
625      ],
626    }),
627  });
628
629  build() {
630    Column() {
631      Button("支持自定义内容弹出框")
632        .onClick(() => {
633          this.dialogController.open()
634        })
635    }
636    .width('100%')
637    .height('100%')
638    .justifyContent(FlexAlign.Center)
639  }
640
641  // 自定义弹出框的内容区
642  @Builder
643  buildContent(): void {
644    Column() {
645      Text('内容区')
646    }
647    .width('100%')
648  }
649}
650```
651
652![custom_content_dialog](figures/advanced_dialog_custom_content_dialog.png)
653
654### 示例9(跟手弹窗)
655跟手弹窗(警告弹窗为例),包含visible、popover、targetBuilder等内容。
656
657```ts
658import { AlertDialog, PopoverDialog, PopoverOptions } from '@kit.ArkUI';
659
660@Entry
661@Component
662struct Index {
663  @State isShow: boolean = false;
664  @State popoverOptions: PopoverOptions = {
665    builder: () => {
666      this.dialogBuilder();
667    },
668    width: 320,
669  }
670
671  // 跟手弹窗内容
672  @Builder dialogBuilder() {
673    AlertDialog({
674      content: '跟手弹出框',
675      primaryButton: {
676        value: '取消',
677        action: () => {
678          this.isShow = false;
679        },
680      },
681      secondaryButton: {
682        value: '确认',
683        action: () => {
684          this.isShow = false;
685        },
686      },
687    });
688  }
689
690  // 跟手弹窗绑定的builder
691  @Builder buttonBuilder() {
692    Button('跟手弹窗目标组件')
693    .onClick(() => {
694      this.isShow = true;
695    });
696  }
697
698  build() {
699    Column() {
700      PopoverDialog({
701        visible: this.isShow,
702        popover: this.popoverOptions,
703        targetBuilder: () => {
704          this.buttonBuilder();
705        },
706      })
707    }
708  }
709}
710```
711
712![popover_dialog](figures/advanced_dialog_popover_dialog.png)