• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 日期滑动选择器弹窗 (DatePickerDialog)
2
3根据指定的日期范围创建日期滑动选择器,展示在弹窗上。
4
5>  **说明:**
6>
7> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](../js-apis-arkui-UIContext.md#uicontext)说明。
10>
11> 从API version 10开始,可以通过使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../js-apis-arkui-UIContext.md#showdatepickerdialog)来明确UI的执行上下文。
12
13## DatePickerDialog
14
15### show
16
17static show(options?: DatePickerDialogOptions)
18
19定义日期滑动选择器弹窗并弹出。
20
21**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
22
23**系统能力:** SystemCapability.ArkUI.ArkUI.Full
24
25**参数:**
26
27| 参数名  | 类型                                                        | 必填 | 说明                       |
28| ------- | ----------------------------------------------------------- | ---- | -------------------------- |
29| options | [DatePickerDialogOptions](#datepickerdialogoptions对象说明) | 否   | 配置日期选择器弹窗的参数。 |
30
31## DatePickerDialogOptions对象说明
32
33继承自[DatePickerOptions](ts-basic-components-datepicker.md#datepickeroptions对象说明)。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37| 名称 | 类型 | 必填 | 说明 |
38| -------- | -------- | -------- | -------- |
39| lunar | boolean | 否 | 日期是否显示为农历,true表示显示农历,false表示不显示农历。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
40| showTime<sup>10+</sup> | boolean | 否 | 是否展示时间项,true表示显示时间,false表示不显示时间。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
41| useMilitaryTime<sup>10+</sup> | boolean | 否 | 展示时间是否为24小时制,true表示显示24小时制,false表示显示12小时制。<br/>默认值:false<br />**说明:** <br/>当展示时间为12小时制时,上下午与小时无联动关系。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
42| lunarSwitch<sup>10+</sup> | boolean | 否 | 是否展示切换农历的开关,true表示展示开关,false表示不展示开关。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
43| 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开始,该接口支持在原子化服务中使用。 |
44| 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开始,该接口支持在原子化服务中使用。 |
45| selectedTextStyle<sup>10+</sup> | [PickerTextStyle](ts-basic-components-datepicker.md#pickertextstyle10类型说明) | 否 | 设置选中项的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff007dff',<br/>font: {<br/>size: '20vp', <br/>weight: FontWeight.Medium<br/>}<br/>} <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
46| acceptButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](#pickerdialogbuttonstyle12类型说明) | 否 | 设置确认按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br />acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,二者primary字段均配置为true时均不生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
47| cancelButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](#pickerdialogbuttonstyle12类型说明) | 否 | 设置取消按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br />acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,二者primary字段均配置为true时均不生效。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
48| alignment<sup>10+</sup>  | [DialogAlignment](ts-methods-alert-dialog-box.md#dialogalignment枚举说明) | 否   | 弹窗在竖直方向上的对齐方式。<br>默认值:DialogAlignment.Default<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
49| 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开始,该接口支持在原子化服务中使用。|
50| 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开始,该接口支持在原子化服务中使用。 |
51| onAccept<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#datepickerresult对象说明)) => void | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateAccept。 |
52| onCancel | () => void | 否 | 点击弹窗中的“取消”按钮时触发该回调。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
53| onChange<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#datepickerresult对象说明)) => void | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateChange。 |
54| onDateAccept<sup>10+</sup> | (value:  Date) => void | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
55| onDateChange<sup>10+</sup> | (value:  Date) => void | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
56| backgroundColor<sup>11+</sup> | [ResourceColor](ts-types.md#resourcecolor)  | 否 | 弹窗背板颜色。<br/>默认值:Color.Transparent<br/>**说明:** <br/>当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则颜色显示将不符合预期效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
57| 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开始,该接口支持在原子化服务中使用。 |
58| onDidAppear<sup>12+</sup> | () => void | 否 | 弹窗弹出时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.在onDidAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。<br />3.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。<br />4. 当弹窗入场动效未完成时关闭弹窗,该回调不会触发。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
59| onDidDisappear<sup>12+</sup> | () => void | 否 | 弹窗消失时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
60| onWillAppear<sup>12+</sup> | () => void | 否 | 弹窗显示动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.在onWillAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
61| onWillDisappear<sup>12+</sup> | () => void | 否 | 弹窗退出动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
62| 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开始,该接口支持在原子化服务中使用。|
63| 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开始,该接口支持在原子化服务中使用。|
64
65## PickerDialogButtonStyle<sup>12+</sup>类型说明
66
67**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
68
69**系统能力:** SystemCapability.ArkUI.ArkUI.Full
70
71| 参数名   | 参数类型                                     | 必填   | 参数描述                      |
72| ----- | ---------------------------------------- | ---- | ------------------------- |
73| type | [ButtonType](ts-basic-components-button.md#buttontype枚举说明) | 否    | 按钮显示样式。                     |
74| style  | [ButtonStyleMode](ts-basic-components-button.md#buttonstylemode11枚举说明)                 | 否    | 按钮的样式和重要程度。 |
75| role | [ButtonRole](ts-basic-components-button.md#buttonrole12枚举说明) | 否    | Button组件的角色。                     |
76| fontSize  | [Length](ts-types.md#length)                 | 否    | 文本显示字号。 |
77| fontColor | [ResourceColor](ts-types.md#resourcecolor) | 否    | 文本显示颜色。                     |
78| fontWeight  | [FontWeight](ts-appendix-enums.md#fontweight)&nbsp;\|&nbsp;number&nbsp;\|&nbsp;string| 否    | 文本的字体粗细,number类型取值[100, 900],取值间隔为100,取值越大,字体越粗 |
79| fontStyle | [FontStyle](ts-appendix-enums.md#fontstyle) | 否    | 文本的字体样式。                     |
80| fontFamily  |  [Resource](ts-types.md#resource)&nbsp;\|&nbsp;string  | 否    | 字体列表。默认字体'HarmonyOS Sans',当前支持'HarmonyOS Sans'字体和[注册自定义字体](../js-apis-font.md)。 |
81| backgroundColor | [ResourceColor](ts-types.md#resourcecolor) | 否    | 按钮背景色。                     |
82| borderRadius  | [Length](ts-types.md#length) \| [BorderRadiuses](ts-types.md#borderradiuses9)| 否    | 圆角半径。 |
83| primary  | boolean | 否    | 在弹窗获焦且未进行tab键走焦时,按钮是否默认响应Enter键。 |
84
85**异常情形说明:**
86
87| 异常情形   | 对应结果  |
88| -------- |  ------------------------------------------------------------ |
89| 起始日期晚于结束日期,选中日期未设置    | 起始日期、结束日期和选中日期都为默认值  |
90| 起始日期晚于结束日期,选中日期早于起始日期默认值    | 起始日期、结束日期都为默认值,选中日期为起始日期默认值  |
91| 起始日期晚于结束日期,选中日期晚于结束日期默认值    | 起始日期、结束日期都为默认值,选中日期为结束日期默认值  |
92| 起始日期晚于结束日期,选中日期在起始日期与结束日期默认值范围内    | 起始日期、结束日期都为默认值,选中日期为设置的值 |
93| 选中日期早于起始日期    | 选中日期为起始日期  |
94| 选中日期晚于结束日期    | 选中日期为结束日期  |
95| 起始日期晚于当前系统日期,选中日期未设置    | 选中日期为起始日期  |
96| 结束日期早于当前系统日期,选中日期未设置    | 选中日期为结束日期  |
97| 日期格式不符合规范,如‘1999-13-32’   | 取默认值  |
98| 起始日期或结束日期早于系统有效范围    | 起始日期或结束日期取系统有效范围最早日期  |
99| 起始日期或结束日期晚于系统有效范围    | 起始日期或结束日期取系统有效范围最晚日期  |
100
101系统日期范围:1900-1-31 ~ 2100-12-31
102
103选中日期会在起始日期与结束日期异常处理完成后再进行异常情形判断处理
104
105## 示例
106
107>  **说明:**
108>
109> 推荐通过使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../js-apis-arkui-UIContext.md#showdatepickerdialog)来明确UI的执行上下文。
110
111### 示例1
112
113DatePickerDialog基本使用
114
115```ts
116// xxx.ets
117@Entry
118@Component
119struct DatePickerDialogExample {
120  selectedDate: Date = new Date("2010-1-1")
121
122  build() {
123    Column() {
124      Button("DatePickerDialog")
125        .margin(20)
126        .onClick(() => {
127          DatePickerDialog.show({ // 建议使用 this.getUIContext().showDatePickerDialog()接口
128            start: new Date("2000-1-1"),
129            end: new Date("2100-12-31"),
130            selected: this.selectedDate,
131            showTime:true,
132            useMilitaryTime:false,
133            disappearTextStyle: {color: Color.Pink, font: {size: '22fp', weight: FontWeight.Bold}},
134            textStyle: {color: '#ff00ff00', font: {size: '18fp', weight: FontWeight.Normal}},
135            selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
136            onDateAccept: (value: Date) => {
137              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
138              this.selectedDate = value
139              console.info("DatePickerDialog:onDateAccept()" + value.toString())
140            },
141            onCancel: () => {
142              console.info("DatePickerDialog:onCancel()")
143            },
144            onDateChange: (value: Date) => {
145              console.info("DatePickerDialog:onDateChange()" + value.toString())
146            },
147            onDidAppear: () => {
148              console.info("DatePickerDialog:onDidAppear()")
149            },
150            onDidDisappear: () => {
151              console.info("DatePickerDialog:onDidDisappear()")
152            },
153            onWillAppear: () => {
154              console.info("DatePickerDialog:onWillAppear()")
155            },
156            onWillDisappear: () => {
157              console.info("DatePickerDialog:onWillDisappear()")
158            }
159          })
160        })
161
162      Button("Lunar DatePickerDialog")
163        .margin(20)
164        .onClick(() => {
165          DatePickerDialog.show({
166            start: new Date("2000-1-1"),
167            end: new Date("2100-12-31"),
168            selected: this.selectedDate,
169            lunar: true,
170            disappearTextStyle: {color: Color.Pink, font: {size: '22fp', weight: FontWeight.Bold}},
171            textStyle: {color: '#ff00ff00', font: {size: '18fp', weight: FontWeight.Normal}},
172            selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
173            onDateAccept: (value: Date) => {
174              this.selectedDate = value
175              console.info("DatePickerDialog:onDateAccept()" + value.toString())
176            },
177            onCancel: () => {
178              console.info("DatePickerDialog:onCancel()")
179            },
180            onDateChange: (value: Date) => {
181              console.info("DatePickerDialog:onDateChange()" + value.toString())
182            },
183            onDidAppear: () => {
184              console.info("DatePickerDialog:onDidAppear()")
185            },
186            onDidDisappear: () => {
187              console.info("DatePickerDialog:onDidDisappear()")
188            },
189            onWillAppear: () => {
190              console.info("DatePickerDialog:onWillAppear()")
191            },
192            onWillDisappear: () => {
193              console.info("DatePickerDialog:onWillDisappear()")
194            }
195          })
196        })
197    }.width('100%')
198  }
199}
200```
201
202![DataPickerDialog](figures/DatePickerDialog.gif)
203
204### 示例2
205
206按钮支持自定义样式
207
208```ts
209// xxx.ets
210@Entry
211@Component
212struct DatePickerDialogExample {
213  selectedDate: Date = new Date("2010-1-1")
214
215  build() {
216    Column() {
217      Button("DatePickerDialog")
218        .margin(20)
219        .onClick(() => {
220          DatePickerDialog.show({
221            start: new Date("2000-1-1"),
222            end: new Date("2100-12-31"),
223            selected: this.selectedDate,
224            showTime:true,
225            useMilitaryTime:false,
226            disappearTextStyle: {color: Color.Pink, font: {size: '22fp', weight: FontWeight.Bold}},
227            textStyle: {color: '#ff00ff00', font: {size: '18fp', weight: FontWeight.Normal}},
228            selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
229            acceptButtonStyle: { type: ButtonType.Normal, style: ButtonStyleMode.NORMAL, role: ButtonRole.NORMAL, fontColor: Color.Red,
230              fontSize: '26fp', fontWeight: FontWeight.Bolder, fontStyle: FontStyle.Normal, fontFamily: 'sans-serif', backgroundColor:'#80834511',
231              borderRadius: 20 },
232            cancelButtonStyle: { type: ButtonType.Normal, style: ButtonStyleMode.NORMAL, role: ButtonRole.NORMAL, fontColor: Color.Blue,
233              fontSize: '16fp', fontWeight: FontWeight.Normal, fontStyle: FontStyle.Italic, fontFamily: 'sans-serif', backgroundColor:'#50182431',
234              borderRadius: 10 },
235            onDateAccept: (value: Date) => {
236              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
237              this.selectedDate = value
238              console.info("DatePickerDialog:onDateAccept()" + value.toString())
239            },
240            onCancel: () => {
241              console.info("DatePickerDialog:onCancel()")
242            },
243            onDateChange: (value: Date) => {
244              console.info("DatePickerDialog:onDateChange()" + value.toString())
245            },
246            onDidAppear: () => {
247              console.info("DatePickerDialog:onDidAppear()")
248            },
249            onDidDisappear: () => {
250              console.info("DatePickerDialog:onDidDisappear()")
251            },
252            onWillAppear: () => {
253              console.info("DatePickerDialog:onWillAppear()")
254            },
255            onWillDisappear: () => {
256              console.info("DatePickerDialog:onWillDisappear()")
257            }
258          })
259        })
260    }.width('100%')
261  }
262}
263```
264
265![DataPickerDialog](figures/DatePickerDialog_CustomButton.png)
266
267> **说明:**
268>
269> 如需完全自定义实现日期滑动选择器弹窗,可以通过先使用[自定义弹窗 (CustomDialog)](ts-methods-custom-dialog-box.md),然后使用[DatePicker组件](ts-basic-components-datepicker.md)来实现。
270