• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 时间滑动选择器弹窗 (TimePickerDialog)
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @luoying_ace_admin-->
5<!--Designer: @weixin_52725220-->
6<!--Tester: @xiong0104-->
7<!--Adviser: @HelloCrease-->
8
9以24小时的时间区间创建时间滑动选择器,展示在弹窗上。
10
11>  **说明:**
12>
13> - 该组件从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14>
15> - 本模块功能依赖UI的执行上下文,不可在[UI上下文不明确](../../../ui/arkts-global-interface.md#ui上下文不明确)的地方使用,参见[UIContext](../arkts-apis-uicontext-uicontext.md)说明。
16>
17> - 本模块不支持深浅色模式热更新,如果需要进行深浅色模式切换,请重新打开弹窗。
18
19## TimePickerDialog
20
21### show<sup>(deprecated)</sup>
22
23static show(options?: TimePickerDialogOptions)
24
25定义时间滑动选择器弹窗并弹出。
26
27> **说明:**
28>
29> 从API version 18开始废弃,建议使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[showTimePickerDialog](../arkts-apis-uicontext-uicontext.md#showtimepickerdialog)替代。
30>
31> 从API version 10开始,可以通过使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[showTimePickerDialog](../arkts-apis-uicontext-uicontext.md#showtimepickerdialog)来明确UI的执行上下文。
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37**设备行为差异:** 该接口在Wearable设备上使用时,应用程序运行异常,异常信息中提示接口未定义,在其他设备中可正常调用。
38
39**参数:**
40
41| 参数名  | 类型                                                        | 必填 | 说明                       |
42| ------- | ----------------------------------------------------------- | ---- | -------------------------- |
43| options | [TimePickerDialogOptions](#timepickerdialogoptions对象说明) | 否   | 配置时间选择器弹窗的参数。 |
44
45## TimePickerDialogOptions对象说明
46
47时间选择器弹窗选项。
48
49继承自[TimePickerOptions](ts-basic-components-timepicker.md#timepickeroptions对象说明)。
50
51**系统能力:** SystemCapability.ArkUI.ArkUI.Full
52
53| 名称 | 类型 | 只读 | 可选 | 说明 |
54| -------- | -------- | -------- | -------- | -------- |
55| useMilitaryTime | boolean | 否 | 是 | 时间是否以24小时制展示。<br/>- true:时间以24小时制展示。<br/>- false:时间以12小时制展示。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
56| disappearTextStyle<sup>10+</sup> | [PickerTextStyle](ts-picker-common.md#pickertextstyle对象说明) | 否 | 是 | 设置边缘项(以选中项为基准向上或向下的第二项)的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff182431',<br/>font: {<br/>size: '14fp', <br/>weight: FontWeight.Regular<br/>}<br/>}<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
57| textStyle<sup>10+</sup> | [PickerTextStyle](ts-picker-common.md#pickertextstyle对象说明) | 否 | 是 | 设置待选项(以选中项为基准向上或向下的第一项)的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff182431',<br/>font: {<br/>size: '16fp', <br/>weight: FontWeight.Regular<br/>}<br/>}<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
58| selectedTextStyle<sup>10+</sup> | [PickerTextStyle](ts-picker-common.md#pickertextstyle对象说明) | 否 | 是 | 设置选中项的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff007dff',<br/>font: {<br/>size: '20fp', <br/>weight: FontWeight.Medium<br/>}<br/>}<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
59| acceptButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](ts-picker-common.md#pickerdialogbuttonstyle12对象说明) | 否 | 是 | 设置确认按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br/> 1.acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,如果同时设置为true,则primary字段不生效,保持默认值false。<br/>2.按钮高度默认40vp,在关怀模式-大字体场景下高度不变,即使按钮样式设置为圆角矩形[ROUNDED_RECTANGLE](ts-basic-components-button.md#buttontype枚举说明),呈现效果依然是胶囊型按钮[Capsule](ts-basic-components-button.md#buttontype枚举说明)。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
60| cancelButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](ts-picker-common.md#pickerdialogbuttonstyle12对象说明) | 否 | 是 | 设置取消按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br/>1.acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,如果同时设置为true,则primary字段不生效,保持默认值false。<br/>2.按钮高度默认40vp,在关怀模式-大字体场景下高度不变,即使按钮样式设置为圆角矩形[ROUNDED_RECTANGLE](ts-basic-components-button.md#buttontype枚举说明),呈现效果依然是胶囊型按钮[Capsule](ts-basic-components-button.md#buttontype枚举说明)。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
61| alignment<sup>10+</sup>  | [DialogAlignment](ts-methods-alert-dialog-box.md#dialogalignment枚举说明) | 否  | 是  | 设置弹窗在竖直方向上的对齐方式。<br>默认值:DialogAlignment.Default<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
62| offset<sup>10+</sup>     | [Offset](ts-types.md#offset) | 否    | 是    | 设置弹窗相对alignment所在位置的偏移量。<br/>默认值:{&nbsp;dx:&nbsp;0&nbsp;,&nbsp;dy:&nbsp;0&nbsp;}<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
63| maskRect<sup>10+</sup>| [Rectangle](ts-methods-alert-dialog-box.md#rectangle8类型说明) | 否    | 是    | 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。<br/>默认值:{ x: 0, y: 0, width: '100%', height: '100%' }<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
64| onAccept | (value: [TimePickerResult](ts-basic-components-timepicker.md#timepickerresult对象说明)) => void | 否 | 是 | 点击弹窗中的“确定”按钮时触发该回调。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
65| onCancel | () => void | 否 | 是 | 点击弹窗中的“取消”按钮时触发该回调。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
66| onChange | (value: [TimePickerResult](ts-basic-components-timepicker.md#timepickerresult对象说明)) => void | 否 | 是 | 滑动弹窗中的选择器后,选项归位至选中项位置时,触发该回调。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
67| backgroundColor<sup>11+</sup> | [ResourceColor](ts-types.md#resourcecolor)  | 否 | 是 | 弹窗背板颜色。<br/>默认值:Color.Transparent<br/>**说明:** <br/>当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则显示的颜色将不符合预期效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
68| backgroundBlurStyle<sup>11+</sup> | [BlurStyle](ts-universal-attributes-background.md#blurstyle9) | 否 | 是 | 弹窗背板模糊材质。<br/>默认值:BlurStyle.COMPONENT_ULTRA_THICK<br/>**说明:** <br/>设置为BlurStyle.NONE即可关闭背景虚化。当设置了backgroundBlurStyle为非NONE值时,则不要设置backgroundColor,否则显示的颜色将不符合预期效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
69| backgroundBlurStyleOptions<sup>19+</sup> | [BackgroundBlurStyleOptions](ts-universal-attributes-background.md#backgroundblurstyleoptions10对象说明) | 否 | 是 | 背景模糊效果。<br />**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。 |
70| backgroundEffect<sup>19+</sup> | [BackgroundEffectOptions](ts-universal-attributes-background.md#backgroundeffectoptions11) | 否 | 是 | 背景效果参数。<br />**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。 |
71| onDidAppear<sup>12+</sup> | () => void | 否 | 是 | 弹窗弹出时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.在onDidAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。<br />3.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。<br />4. 当弹窗入场动效未完成时关闭弹窗,该回调不会触发。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
72| onDidDisappear<sup>12+</sup> | () => void | 否 | 是 | 弹窗消失时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
73| onWillAppear<sup>12+</sup> | () => void | 否 | 是 | 弹窗显示动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.在onWillAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
74| onWillDisappear<sup>12+</sup> | () => void | 否 | 是 | 弹窗退出动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
75| shadow<sup>12+</sup>              | [ShadowOptions](ts-universal-attributes-image-effect.md#shadowoptions对象说明)&nbsp;\|&nbsp;[ShadowStyle](ts-universal-attributes-image-effect.md#shadowstyle10枚举说明) | 否  | 是  | 设置弹窗背板的阴影。<br />当设备为2in1时,默认场景下获焦阴影值为ShadowStyle.OUTER_FLOATING_MD,失焦为ShadowStyle.OUTER_FLOATING_SM。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
76| dateTimeOptions<sup>12+</sup> | [DateTimeOptions](../../apis-localization-kit/js-apis-intl.md#datetimeoptionsdeprecated) | 否 | 是 | 设置时分是否显示前导0,目前只支持设置hour和minute参数。<br/>默认值:<br/>hour: 24小时制默认为"2-digit",设置hour是否按照2位数字显示,如果实际数值小于10,则会补充前导0并显示,即为"0X";12小时制默认为"numeric",即没有前导0。<br/>minute: 默认为"2-digit",设置minute是否按照2位数字显示,如果实际数值小于10,则会补充前导0并显示,即为"0X"。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
77| enableHoverMode<sup>14+</sup>     | boolean | 否  | 是  | 是否响应悬停态。<br />- true:响应悬停态。<br/>- false:不响应悬停态。<br/>默认值:false<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
78| hoverModeArea<sup>14+</sup>       | [HoverModeAreaType](ts-universal-attributes-sheet-transition.md#hovermodeareatype14) | 否  | 是  | 悬停态下弹窗默认展示区域。<br />默认值:HoverModeAreaType.BOTTOM_SCREEN <br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
79| onEnterSelectedArea<sup>18+</sup>   |  Callback\<[TimePickerResult](ts-basic-components-timepicker.md#timepickerresult对象说明)> | 否  | 是  |  滑动过程中,选项进入分割线区域内,触发该回调。与onChange事件的差别在于,该事件的触发时机早于onChange事件,当当前滑动列滑动距离超过选中项高度的一半时,选项此时已经进入分割线区域内,会触发该事件。<br />**说明:**<br />当enableCascade设置为true时,由于上午/下午列与小时列存在联动关系,不建议使用该回调。该回调标识的是滑动过程中选项进入分割线区域内的节点,而联动变化的选项并不涉及滑动,因此,回调的返回值中,仅当前滑动列的值会正常变化,其余未滑动列的值保持不变。<br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
80| enableCascade<sup>18+</sup>              | boolean | 否  | 是  | 设置上午和下午的标识是否根据小时数自动切换,仅在useMilitaryTime设置为false时生效。<br/>- true:自动切换。<br/>- false:不自动切换。<br/>默认值:false<br/>当enabled设置为true时,仅在loop参数同时为true时生效。<br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。|
81| enableHapticFeedback<sup>18+</sup> | boolean | 否  | 是  | 设置是否开启触控反馈。<br/>- true:开启触控反馈。<br/>- false:不开启触控反馈。<br/>默认值:true<br />**说明**:<br/>1. 设置为true后,其生效情况取决于系统的硬件是否支持。<br/>2. 开启触控反馈时,需要在工程的src/main/module.json5文件的"module"内配置requestPermissions字段开启振动权限,配置如下:<br />"requestPermissions": [{"name": "ohos.permission.VIBRATE"}]<br/>**原子化服务API**: 从API version 18开始,该接口支持在原子化服务中使用。 |
82
83## 示例
84
85>  **说明:**
86>
87> 推荐通过使用[UIContext](../arkts-apis-uicontext-uicontext.md)中的[showTimePickerDialog](../arkts-apis-uicontext-uicontext.md#showtimepickerdialog)来明确UI的执行上下文。
88
89### 示例1(设置时间格式)
90
91该示例通过useMilitaryTime、dateTimeOptions、format设置时间格式。
92
93```ts
94@Entry
95@Component
96struct TimePickerDialogExample {
97  private selectTime: Date = new Date('2020-12-25T08:30:00');
98
99  build() {
100    Column() {
101      Button("TimePickerDialog 12小时制")
102        .margin(20)
103        .onClick(() => {
104          this.getUIContext().showTimePickerDialog({
105            selected: this.selectTime,
106            format: TimePickerFormat.HOUR_MINUTE,
107            useMilitaryTime: false,
108            dateTimeOptions: { hour: "numeric", minute: "2-digit" },
109            onAccept: (value: TimePickerResult) => {
110              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
111              if (value.hour != undefined && value.minute != undefined) {
112                this.selectTime.setHours(value.hour, value.minute);
113                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
114              }
115            },
116            onCancel: () => {
117              console.info("TimePickerDialog:onCancel()");
118            },
119            onChange: (value: TimePickerResult) => {
120              console.info("TimePickerDialog:onChange()" + JSON.stringify(value));
121            },
122            onDidAppear: () => {
123              console.info("TimePickerDialog:onDidAppear()");
124            },
125            onDidDisappear: () => {
126              console.info("TimePickerDialog:onDidDisappear()");
127            },
128            onWillAppear: () => {
129              console.info("TimePickerDialog:onWillAppear()");
130            },
131            onWillDisappear: () => {
132              console.info("TimePickerDialog:onWillDisappear()");
133            }
134          });
135        })
136      Button("TimePickerDialog 24小时制")
137        .margin(20)
138        .onClick(() => {
139          this.getUIContext().showTimePickerDialog({
140            selected: this.selectTime,
141            format: TimePickerFormat.HOUR_MINUTE_SECOND,
142            useMilitaryTime: true,
143            onAccept: (value: TimePickerResult) => {
144              if (value.hour != undefined && value.minute != undefined) {
145                this.selectTime.setHours(value.hour, value.minute);
146                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
147              }
148            },
149          })
150        })
151    }.width('100%')
152  }
153}
154```
155
156![TimePickerDialog](figures/TimePickerDialog.gif)
157
158
159### 示例2(自定义样式)
160
161该示例通过配置disappearTextStyle、textStyle、selectedTextStyle、acceptButtonStyle、cancelButtonStyle实现了自定义文本以及按钮样式。
162
163```ts
164// xxx.ets
165@Entry
166@Component
167struct TimePickerDialogExample {
168  private selectTime: Date = new Date('2020-12-25T08:30:00');
169
170  build() {
171    Column() {
172      Button("TimePickerDialog 24小时制")
173        .margin(20)
174        .onClick(() => {
175          this.getUIContext().showTimePickerDialog({
176            disappearTextStyle: { color: '#297bec', font: { size: 15, weight: FontWeight.Lighter } },
177            textStyle: { color: Color.Black, font: { size: 20, weight: FontWeight.Normal } },
178            selectedTextStyle: { color: Color.Blue, font: { size: 30, weight: FontWeight.Bolder } },
179            acceptButtonStyle: {
180              type: ButtonType.Normal,
181              style: ButtonStyleMode.NORMAL,
182              role: ButtonRole.NORMAL,
183              fontColor: 'rgb(81, 81, 216)',
184              fontSize: '26fp',
185              fontWeight: FontWeight.Bolder,
186              fontStyle: FontStyle.Normal,
187              fontFamily: 'sans-serif',
188              backgroundColor: '#A6ACAF',
189              borderRadius: 20
190            },
191            cancelButtonStyle: {
192              type: ButtonType.Normal,
193              style: ButtonStyleMode.NORMAL,
194              role: ButtonRole.NORMAL,
195              fontColor: Color.Blue,
196              fontSize: '16fp',
197              fontWeight: FontWeight.Normal,
198              fontStyle: FontStyle.Italic,
199              fontFamily: 'sans-serif',
200              backgroundColor: '#50182431',
201              borderRadius: 10
202            },
203            onAccept: (value: TimePickerResult) => {
204              if (value.hour != undefined && value.minute != undefined) {
205                this.selectTime.setHours(value.hour, value.minute);
206                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
207              }
208            }
209          });
210        })
211    }.width('100%')
212  }
213}
214```
215
216![TimePickerDialog](figures/TimePickerDialog_CustomButton.png)
217
218### 示例3(悬停态弹窗)
219
220该示例展示了在折叠屏悬停态下设置dialog布局区域的效果。
221
222```ts
223@Entry
224@Component
225struct TimePickerDialogExample {
226  private selectTime: Date = new Date('2020-12-25T08:30:00');
227
228  build() {
229    Column() {
230      Button("TimePickerDialog 12小时制")
231        .margin(20)
232        .onClick(() => {
233          this.getUIContext().showTimePickerDialog({
234            selected: this.selectTime,
235            disappearTextStyle: { color: Color.Red, font: { size: 15, weight: FontWeight.Lighter } },
236            textStyle: { color: Color.Black, font: { size: 20, weight: FontWeight.Normal } },
237            selectedTextStyle: { color: Color.Blue, font: { size: 30, weight: FontWeight.Bolder } },
238            onAccept: (value: TimePickerResult) => {
239              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
240              if (value.hour != undefined && value.minute != undefined) {
241                this.selectTime.setHours(value.hour, value.minute);
242                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
243              }
244            },
245            onCancel: () => {
246              console.info("TimePickerDialog:onCancel()");
247            },
248            onChange: (value: TimePickerResult) => {
249              console.info("TimePickerDialog:onChange()" + JSON.stringify(value));
250            },
251            onDidAppear: () => {
252              console.info("TimePickerDialog:onDidAppear()");
253            },
254            onDidDisappear: () => {
255              console.info("TimePickerDialog:onDidDisappear()");
256            },
257            onWillAppear: () => {
258              console.info("TimePickerDialog:onWillAppear()");
259            },
260            onWillDisappear: () => {
261              console.info("TimePickerDialog:onWillDisappear()");
262            },
263            enableHoverMode: true,
264            hoverModeArea: HoverModeAreaType.TOP_SCREEN
265          });
266        })
267    }.width('100%')
268  }
269}
270```
271
272![TimePickerDialog](figures/TimePickerDialog_HoverMode.gif)
273
274### 示例4(设置弹窗位置)
275
276该示例通过alignment和offset设置弹窗的位置。
277
278```ts
279// xxx.ets
280@Entry
281@Component
282struct TimePickerDialogExample {
283  private selectTime: Date = new Date('2020-12-25T08:30:00');
284
285  build() {
286    Column() {
287      Button("TimePickerDialog")
288        .margin(20)
289        .onClick(() => {
290          this.getUIContext().showTimePickerDialog({
291            alignment: DialogAlignment.Center,
292            offset: { dx: 20 , dy: 0 },
293            onAccept: (value: TimePickerResult) => {
294              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
295              if (value.hour != undefined && value.minute != undefined) {
296                this.selectTime.setHours(value.hour, value.minute);
297                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
298              }
299            }
300          });
301        })
302    }.width('100%')
303  }
304}
305```
306
307![TimePickerDialog](figures/TimePickerDialogDemo4.png)
308
309### 示例5(设置遮蔽区)
310
311该示例通过maskRect设置遮蔽区。
312
313```ts
314// xxx.ets
315@Entry
316@Component
317struct TimePickerDialogExample {
318  private selectTime: Date = new Date('2020-12-25T08:30:00');
319
320  build() {
321    Column() {
322      Button("TimePickerDialog")
323        .margin(20)
324        .onClick(() => {
325          this.getUIContext().showTimePickerDialog({
326            maskRect: { x: 30, y: 60, width: '100%', height: '60%' },
327            onAccept: (value: TimePickerResult) => {
328              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
329              if (value.hour != undefined && value.minute != undefined) {
330                this.selectTime.setHours(value.hour, value.minute);
331                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
332              }
333            }
334          });
335        })
336    }.width('100%')
337  }
338}
339```
340
341![TimePickerDialog](figures/TimePickerDialogDemo5.png)
342
343### 示例6(设置弹窗背板)
344
345该示例通过maskRect设置弹窗背板。
346
347```ts
348// xxx.ets
349@Entry
350@Component
351struct TimePickerDialogExample {
352  private selectTime: Date = new Date('2020-12-25T08:30:00');
353
354  build() {
355    Column() {
356      Button("TimePickerDialog")
357        .margin(20)
358        .onClick(() => {
359          this.getUIContext().showTimePickerDialog({
360            backgroundColor: 'rgb(204, 226, 251)',
361            backgroundBlurStyle: BlurStyle.NONE,
362            shadow: ShadowStyle.OUTER_FLOATING_SM,
363            onAccept: (value: TimePickerResult) => {
364              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
365              if (value.hour != undefined && value.minute != undefined) {
366                this.selectTime.setHours(value.hour, value.minute);
367                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
368              }
369            }
370          });
371        })
372    }.width('100%')
373  }
374}
375```
376![TimePickerDialog](figures/TimePickerDialogDemo6.png)
377
378### 示例7(设置时间滑动选择器弹窗的起始时间)
379
380该示例设置TimePickerDialog的起始时间。
381
382```ts
383// xxx.ets
384@Entry
385@Component
386struct TimePickerDialogExample {
387  private selectTime: Date = new Date('2022-07-22T08:50:00');
388
389  build() {
390    Column() {
391      Button("TimePickerDialog")
392        .margin(20)
393        .onClick(() => {
394          this.getUIContext().showTimePickerDialog({
395            useMilitaryTime: false,
396            selected: this.selectTime,
397            format: TimePickerFormat.HOUR_MINUTE_SECOND,
398            start: new Date('2022-07-22T08:30:00'),
399            onAccept: (value: TimePickerResult) => {
400              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
401              if (value.hour != undefined && value.minute != undefined) {
402                this.selectTime.setHours(value.hour, value.minute);
403                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
404              }
405            }
406          });
407        })
408    }.width('100%')
409  }
410}
411```
412![TimePickerDialog](figures/TimePickerDialogDemo7.png)
413
414### 示例8(设置时间滑动选择器弹窗的结束时间)
415
416该示例设置TimePickerDialog的结束时间。
417
418```ts
419// xxx.ets
420@Entry
421@Component
422struct TimePickerDialogExample {
423  private selectTime: Date = new Date('2022-07-22T08:50:00');
424
425  build() {
426    Column() {
427      Button("TimePickerDialog")
428        .margin(20)
429        .onClick(() => {
430          this.getUIContext().showTimePickerDialog({
431            useMilitaryTime: false,
432            selected: this.selectTime,
433            format: TimePickerFormat.HOUR_MINUTE_SECOND,
434            end: new Date('2022-07-22T15:20:00'),
435            onAccept: (value: TimePickerResult) => {
436              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
437              if (value.hour != undefined && value.minute != undefined) {
438                this.selectTime.setHours(value.hour, value.minute);
439                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
440              }
441            }
442          });
443        })
444    }.width('100%')
445  }
446}
447```
448![TimePickerDialog](figures/TimePickerDialogDemo8.png)
449
450### 示例9(设置上午下午跟随时间联动)
451
452该示例通过配置enableCascade实现12小时制时上午下午跟随时间联动。
453
454```ts
455// xxx.ets
456@Entry
457@Component
458struct TimePickerDialogExample {
459  private selectTime: Date = new Date('2022-07-22T08:00:00');
460
461  build() {
462    Column() {
463      Button("TimePickerDialog")
464        .margin(20)
465        .onClick(() => {
466          this.getUIContext().showTimePickerDialog({
467            useMilitaryTime: false,
468            selected: this.selectTime,
469            enableCascade:true,
470            onAccept: (value: TimePickerResult) => {
471              // 设置selectTime为按下确定按钮时的时间,这样当弹窗再次弹出时显示选中的为上一次确定的时间
472              if (value.hour != undefined && value.minute != undefined) {
473                this.selectTime.setHours(value.hour, value.minute);
474                console.info("TimePickerDialog:onAccept()" + JSON.stringify(value));
475              }
476            }
477          });
478        })
479    }.width('100%')
480  }
481}
482```
483
484![TimePicker](figures/TimePickerDialogDemo9.gif)
485
486### 示例10(自定义背景模糊效果参数)
487
488从API version 19开始,该示例通过配置[backgroundBlurStyleOptions](#timepickerdialogoptions对象说明),实现自定义背景模糊效果。
489
490```ts
491@Entry
492@Component
493struct TimePickerDialogExample {
494  build() {
495    Stack({ alignContent: Alignment.Top }) {
496      Image($r('app.media.bg'))
497      Column() {
498        Button("TimePickerDialog")
499          .margin(20)
500          .onClick(() => {
501            this.getUIContext().showTimePickerDialog({
502              backgroundColor: undefined,
503              backgroundBlurStyle: BlurStyle.Thin,
504              backgroundBlurStyleOptions: {
505                colorMode: ThemeColorMode.LIGHT,
506                adaptiveColor: AdaptiveColor.AVERAGE,
507                scale: 1,
508                blurOptions: { grayscale: [20, 20] },
509              },
510            });
511          })
512      }.width('100%')
513    }
514  }
515}
516```
517
518![TimePickerDialog](figures/TimePickerDialog_BackgroundBlurStyleOptions.png)
519
520### 示例11(自定义背景效果参数)
521
522从API version 19开始,该示例通过配置[backgroundEffect](#timepickerdialogoptions对象说明),实现自定义背景效果。
523
524```ts
525@Entry
526@Component
527struct TimePickerDialogExample {
528  build() {
529    Stack({ alignContent: Alignment.Top }) {
530      Image($r('app.media.bg'))
531      Column() {
532        Button("TimePickerDialog")
533          .margin(20)
534          .onClick(() => {
535            this.getUIContext().showTimePickerDialog({
536              backgroundColor: undefined,
537              backgroundBlurStyle: BlurStyle.Thin,
538              backgroundEffect: {
539                radius: 60,
540                saturation: 0,
541                brightness: 1,
542                color: Color.White,
543                blurOptions: { grayscale: [20, 20] }
544              },
545            });
546          })
547      }.width('100%')
548    }
549  }
550}
551```
552
553![TimePickerDialog](figures/TimePickerDialog_BackgroundEffect.png)