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