• 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> 该组件不支持在Wearable设备上使用。
12
13## DatePickerDialog
14
15### show<sup>(deprecated)</sup>
16
17static show(options?: DatePickerDialogOptions)
18
19定义日期滑动选择器弹窗并弹出。
20
21> **说明:**
22>
23> 从API version 18开始废弃,建议使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../js-apis-arkui-UIContext.md#showdatepickerdialog)替代。
24>
25> 从API version 10开始,可以通过使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../js-apis-arkui-UIContext.md#showdatepickerdialog)来明确UI的执行上下文。
26
27**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.ArkUI.ArkUI.Full
30
31**参数:**
32
33| 参数名  | 类型                                                        | 必填 | 说明                       |
34| ------- | ----------------------------------------------------------- | ---- | -------------------------- |
35| options | [DatePickerDialogOptions](#datepickerdialogoptions对象说明) | 否   | 配置日期选择器弹窗的参数。 |
36
37## DatePickerDialogOptions对象说明
38
39继承自[DatePickerOptions](ts-basic-components-datepicker.md#datepickeroptions对象说明)。
40
41**系统能力:** SystemCapability.ArkUI.ArkUI.Full
42
43| 名称 | 类型 | 必填 | 说明 |
44| -------- | -------- | -------- | -------- |
45| lunar | boolean | 否 | 日期是否显示为农历,true表示显示农历,false表示不显示农历。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
46| showTime<sup>10+</sup> | boolean | 否 | 是否展示时间项,true表示显示时间,false表示不显示时间。<br/>默认值:false<br/>当showTime=true时,mode参数不生效,显示默认年月日三列。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
47| useMilitaryTime<sup>10+</sup> | boolean | 否 | 展示时间是否为24小时制,true表示显示24小时制,false表示显示12小时制。<br/>默认值:false<br />**说明:** <br/>当展示时间为12小时制时,上下午与小时无联动关系。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
48| lunarSwitch<sup>10+</sup> | boolean | 否 | 是否展示切换农历的开关,true表示展示开关,false表示不展示开关。<br/>默认值:false<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
49| lunarSwitchStyle<sup>14+</sup> | [LunarSwitchStyle](#lunarswitchstyle14类型说明) | 否 | 设置农历开关的颜色样式。<br/>默认值:{ selectedColor: `$r('sys.color.ohos_id_color_text_primary_actived')`, unselectedColor: `$r('sys.color.ohos_id_color_switch_outline_off')`, strokeColor: Color.White }<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 |
50| 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开始,该接口支持在原子化服务中使用。 |
51| 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开始,该接口支持在原子化服务中使用。 |
52| 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开始,该接口支持在原子化服务中使用。|
53| acceptButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](#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开始,该接口支持在原子化服务中使用。|
54| cancelButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](#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开始,该接口支持在原子化服务中使用。|
55| alignment<sup>10+</sup>  | [DialogAlignment](ts-methods-alert-dialog-box.md#dialogalignment枚举说明) | 否   | 弹窗在竖直方向上的对齐方式。<br>默认值:DialogAlignment.Default<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
56| 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开始,该接口支持在原子化服务中使用。|
57| 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开始,该接口支持在原子化服务中使用。 |
58| onAccept<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#datepickerresult对象说明)) => void | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateAccept。 |
59| onCancel | [VoidCallback](ts-types.md#voidcallback12) | 否 | 点击弹窗中的“取消”按钮时触发该回调。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
60| onChange<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#datepickerresult对象说明)) => void | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateChange。 |
61| onDateAccept<sup>10+</sup> | [Callback](ts-types.md#callback12)\<Date> | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
62| onDateChange<sup>10+</sup> | [Callback](ts-types.md#callback12)\<Date> | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
63| backgroundColor<sup>11+</sup> | [ResourceColor](ts-types.md#resourcecolor)  | 否 | 弹窗背板颜色。<br/>默认值:Color.Transparent<br/>**说明:** <br/>当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则颜色显示将不符合预期效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
64| 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开始,该接口支持在原子化服务中使用。 |
65| onDidAppear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗弹出时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.在onDidAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。<br />3.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。<br />4. 当弹窗入场动效未完成时关闭弹窗,该回调不会触发。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
66| onDidDisappear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗消失时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
67| onWillAppear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗显示动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.在onWillAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
68| onWillDisappear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗退出动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onDateAccept/onCancel/onDateChange)>>onWillDisappear>>onDidDisappear。<br />2.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
69| 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开始,该接口支持在原子化服务中使用。|
70| 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开始,该接口支持在原子化服务中使用。|
71| enableHoverMode<sup>14+</sup>     | boolean | 否   | 是否响应悬停态。<br />默认值:false,默认不响应。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
72| hoverModeArea<sup>14+</sup>       | [HoverModeAreaType](ts-appendix-enums.md#hovermodeareatype14) | 否   | 悬停态下弹窗默认展示区域。<br />默认值:HoverModeAreaType.BOTTOM_SCREEN <br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
73| 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"}]|
74
75## LunarSwitchStyle<sup>14+</sup>类型说明
76
77该类型定义了DatePickerDialog组件中切换农历开关的样式。
78
79**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
80
81**系统能力:** SystemCapability.ArkUI.ArkUI.Full
82
83|  参数名  | 类型                 | 必填 | 说明       |
84| ------ |-------------------|-----|----------|
85| selectedColor| [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置开关开启时开关的背景颜色。<br/>默认值:$r('sys.color.ohos_id_color_text_primary_actived')。 |
86| unselectedColor | [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置开关未开启时开关的边框颜色。<br/>默认值:$r('sys.color.ohos_id_color_switch_outline_off')。 |
87| strokeColor     | [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置开关内部图标颜色。<br/>默认值:Color.White。 |
88
89## PickerDialogButtonStyle<sup>12+</sup>类型说明
90
91**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
92
93**系统能力:** SystemCapability.ArkUI.ArkUI.Full
94
95| 参数名   | 参数类型                                     | 必填   | 参数描述                      |
96| ----- | ---------------------------------------- | ---- | ------------------------- |
97| type | [ButtonType](ts-basic-components-button.md#buttontype枚举说明) | 否    | 按钮显示样式。                     |
98| style  | [ButtonStyleMode](ts-basic-components-button.md#buttonstylemode11枚举说明)                 | 否    | 按钮的样式和重要程度。 |
99| role | [ButtonRole](ts-basic-components-button.md#buttonrole12枚举说明) | 否    | Button组件的角色。                     |
100| fontSize  | [Length](ts-types.md#length)                 | 否    | 文本显示字号。 |
101| fontColor | [ResourceColor](ts-types.md#resourcecolor) | 否    | 文本显示颜色。                     |
102| fontWeight  | [FontWeight](ts-appendix-enums.md#fontweight)&nbsp;\|&nbsp;number&nbsp;\|&nbsp;string| 否    | 文本的字体粗细。number类型取值[100, 900],取值间隔为100,取值越大,字体越粗。string类型仅支持number类型取值的字符串形式,例如"200",以及"bold"、"bolder"、"lighter"、"regular"、"medium",分别对应FontWeight中相应的枚举值。 |
103| fontStyle | [FontStyle](ts-appendix-enums.md#fontstyle) | 否    | 文本的字体样式。                     |
104| fontFamily  |  [Resource](ts-types.md#resource)&nbsp;\|&nbsp;string  | 否    | 字体列表。默认字体'HarmonyOS Sans',当前支持'HarmonyOS Sans'字体和[注册自定义字体](../js-apis-font.md)。 |
105| backgroundColor | [ResourceColor](ts-types.md#resourcecolor) | 否    | 按钮背景色。                     |
106| borderRadius  | [Length](ts-types.md#length) \| [BorderRadiuses](ts-types.md#borderradiuses9)| 否    | 圆角半径。 |
107| primary  | boolean | 否    | 在弹窗获焦且未进行tab键走焦时,按钮是否默认响应Enter键。 |
108
109**异常情形说明:**
110
111| 异常情形   | 对应结果  |
112| -------- |  ------------------------------------------------------------ |
113| 起始日期晚于结束日期,选中日期未设置    | 起始日期、结束日期和选中日期都为默认值  |
114| 起始日期晚于结束日期,选中日期早于起始日期默认值    | 起始日期、结束日期都为默认值,选中日期为起始日期默认值  |
115| 起始日期晚于结束日期,选中日期晚于结束日期默认值    | 起始日期、结束日期都为默认值,选中日期为结束日期默认值  |
116| 起始日期晚于结束日期,选中日期在起始日期与结束日期默认值范围内    | 起始日期、结束日期都为默认值,选中日期为设置的值 |
117| 选中日期早于起始日期    | 选中日期为起始日期  |
118| 选中日期晚于结束日期    | 选中日期为结束日期  |
119| 起始日期晚于当前系统日期,选中日期未设置    | 选中日期为起始日期  |
120| 结束日期早于当前系统日期,选中日期未设置    | 选中日期为结束日期  |
121| 日期格式不符合规范,如‘1999-13-32’   | 取默认值  |
122| 起始日期或结束日期早于系统有效范围    | 起始日期或结束日期取系统有效范围最早日期  |
123| 起始日期或结束日期晚于系统有效范围    | 起始日期或结束日期取系统有效范围最晚日期  |
124
125系统日期范围:1900-1-31 ~ 2100-12-31
126
127选中日期会在起始日期与结束日期异常处理完成后再进行异常情形判断处理
128
129## 示例
130
131>  **说明:**
132>
133> 推荐通过使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../js-apis-arkui-UIContext.md#showdatepickerdialog)来明确UI的执行上下文。
134
135### 示例1(设置显示时间)
136
137该示例通过showTime、useMilitaryTime、dateTimeOptions设置显示时间。
138
139```ts
140// xxx.ets
141@Entry
142@Component
143struct DatePickerDialogExample {
144  selectedDate: Date = new Date("2010-1-1")
145
146  build() {
147    Column() {
148      Button("DatePickerDialog")
149        .margin(20)
150        .onClick(() => {
151          this.getUIContext().showDatePickerDialog({
152            start: new Date("2000-1-1"),
153            end: new Date("2100-12-31"),
154            selected: this.selectedDate,
155            showTime: true,
156            useMilitaryTime: false,
157            dateTimeOptions: { hour: "numeric", minute: "2-digit" },
158            onDateAccept: (value: Date) => {
159              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
160              this.selectedDate = value
161              console.info("DatePickerDialog:onDateAccept()" + value.toString())
162            },
163            onCancel: () => {
164              console.info("DatePickerDialog:onCancel()")
165            },
166            onDateChange: (value: Date) => {
167              console.info("DatePickerDialog:onDateChange()" + value.toString())
168            },
169            onDidAppear: () => {
170              console.info("DatePickerDialog:onDidAppear()")
171            },
172            onDidDisappear: () => {
173              console.info("DatePickerDialog:onDidDisappear()")
174            },
175            onWillAppear: () => {
176              console.info("DatePickerDialog:onWillAppear()")
177            },
178            onWillDisappear: () => {
179              console.info("DatePickerDialog:onWillDisappear()")
180            }
181          })
182        })
183    }.width('100%')
184  }
185}
186```
187
188![DataPickerDialog](figures/DatePickerDialog.gif)
189
190### 示例2(自定义样式)
191
192该示例通过配置disappearTextStyle、textStyle、selectedTextStyle、acceptButtonStyle、cancelButtonStyle实现了自定义文本以及按钮样式。
193
194```ts
195// xxx.ets
196@Entry
197@Component
198struct DatePickerDialogExample {
199  selectedDate: Date = new Date("2010-1-1")
200
201  build() {
202    Column() {
203      Button("DatePickerDialog")
204        .margin(20)
205        .onClick(() => {
206          this.getUIContext().showDatePickerDialog({
207            start: new Date("2000-1-1"),
208            end: new Date("2100-12-31"),
209            selected: this.selectedDate,
210            disappearTextStyle: { color: '#297bec', font: { size: '20fp', weight: FontWeight.Bold } },
211            textStyle: { color: Color.Black, font: { size: '18fp', weight: FontWeight.Normal } },
212            selectedTextStyle: { color: Color.Blue, font: { size: '26fp', weight: FontWeight.Regular } },
213            acceptButtonStyle: {
214              type: ButtonType.Normal,
215              style: ButtonStyleMode.NORMAL,
216              role: ButtonRole.NORMAL,
217              fontColor: 'rgb(81, 81, 216)',
218              fontSize: '26fp',
219              fontWeight: FontWeight.Bolder,
220              fontStyle: FontStyle.Normal,
221              fontFamily: 'sans-serif',
222              backgroundColor: '#A6ACAF',
223              borderRadius: 20
224            },
225            cancelButtonStyle: {
226              type: ButtonType.Normal,
227              style: ButtonStyleMode.NORMAL,
228              role: ButtonRole.NORMAL,
229              fontColor: Color.Blue,
230              fontSize: '16fp',
231              fontWeight: FontWeight.Normal,
232              fontStyle: FontStyle.Italic,
233              fontFamily: 'sans-serif',
234              backgroundColor: '#50182431',
235              borderRadius: 10
236            },
237            onDateAccept: (value: Date) => {
238              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
239              this.selectedDate = value
240              console.info("DatePickerDialog:onDateAccept()" + value.toString())
241            },
242            onCancel: () => {
243              console.info("DatePickerDialog:onCancel()")
244            },
245            onDateChange: (value: Date) => {
246              console.info("DatePickerDialog:onDateChange()" + value.toString())
247            },
248            onDidAppear: () => {
249              console.info("DatePickerDialog:onDidAppear()")
250            },
251            onDidDisappear: () => {
252              console.info("DatePickerDialog:onDidDisappear()")
253            },
254            onWillAppear: () => {
255              console.info("DatePickerDialog:onWillAppear()")
256            },
257            onWillDisappear: () => {
258              console.info("DatePickerDialog:onWillDisappear()")
259            }
260          })
261        })
262    }.width('100%')
263  }
264}
265```
266
267![DataPickerDialog](figures/DatePickerDialog_CustomButton.png)
268
269> **说明:**
270>
271> 如需完全自定义实现日期滑动选择器弹窗,可以通过先使用[自定义弹窗 (CustomDialog)](ts-methods-custom-dialog-box.md),然后使用[DatePicker组件](ts-basic-components-datepicker.md)来实现。
272
273### 示例3(悬停态弹窗)
274
275该示例展示了在折叠屏悬停态下设置dialog布局区域的效果。
276
277```ts
278@Entry
279@Component
280struct DatePickerDialogExample {
281  selectedDate: Date = new Date("2010-1-1");
282
283  build() {
284    Column() {
285      Button("DatePickerDialog")
286        .margin(20)
287        .onClick(() => {
288          this.getUIContext().showDatePickerDialog({
289            start: new Date("2000-1-1"),
290            end: new Date("2100-12-31"),
291            selected: this.selectedDate,
292            showTime: true,
293            useMilitaryTime: false,
294            disappearTextStyle: { color: Color.Pink, font: { size: '22fp', weight: FontWeight.Bold }},
295            textStyle: { color: '#ff00ff00', font: { size: '18fp', weight: FontWeight.Normal }},
296            selectedTextStyle: { color: '#ff182431', font: { size: '14fp', weight: FontWeight.Regular }},
297            onDateAccept: (value: Date) => {
298              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
299              this.selectedDate = value;
300              console.info("DatePickerDialog:onDateAccept()" + value.toString());
301            },
302            onCancel: () => {
303              console.info("DatePickerDialog:onCancel()");
304            },
305            onDateChange: (value: Date) => {
306              console.info("DatePickerDialog:onDateChange()" + value.toString());
307            },
308            onDidAppear: () => {
309              console.info("DatePickerDialog:onDidAppear()");
310            },
311            onDidDisappear: () => {
312              console.info("DatePickerDialog:onDidDisappear()");
313            },
314            onWillAppear: () => {
315              console.info("DatePickerDialog:onWillAppear()");
316            },
317            onWillDisappear: () => {
318              console.info("DatePickerDialog:onWillDisappear()");
319            },
320            enableHoverMode: true,
321            hoverModeArea: HoverModeAreaType.TOP_SCREEN
322          })
323        })
324    }.width('100%')
325  }
326}
327```
328
329![DataPickerDialog](figures/DatePickerDialog_HoverMode.gif)
330
331### 示例4(设置弹窗位置)
332
333该示例通过alignment、offset设置弹窗的位置。
334
335```ts
336// xxx.ets
337@Entry
338@Component
339struct DatePickerDialogExample {
340  selectedDate: Date = new Date("2010-1-1")
341
342  build() {
343    Column() {
344      Button("DatePickerDialog")
345        .margin(20)
346        .onClick(() => {
347          this.getUIContext().showDatePickerDialog({
348            start: new Date("2000-1-1"),
349            end: new Date("2100-12-31"),
350            selected: this.selectedDate,
351            alignment: DialogAlignment.Center,
352            offset: { dx: 20, dy: 0 },
353            onDateAccept: (value: Date) => {
354              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
355              this.selectedDate = value
356              console.info("DatePickerDialog:onDateAccept()" + value.toString())
357            }
358          })
359        })
360    }.width('100%')
361  }
362}
363```
364
365![DataPickerDialog](figures/DatePickerDialogDemo4.png)
366
367### 示例5(设置遮蔽区)
368
369该示例通过maskRect设置遮蔽区。
370
371```ts
372// xxx.ets
373@Entry
374@Component
375struct DatePickerDialogExample {
376  selectedDate: Date = new Date("2010-1-1")
377
378  build() {
379    Column() {
380      Button("DatePickerDialog")
381        .margin(20)
382        .onClick(() => {
383          this.getUIContext().showDatePickerDialog({
384            start: new Date("2000-1-1"),
385            end: new Date("2100-12-31"),
386            selected: this.selectedDate,
387            maskRect: {
388              x: 30,
389              y: 60,
390              width: '100%',
391              height: '60%'
392            },
393            onDateAccept: (value: Date) => {
394              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
395              this.selectedDate = value
396              console.info("DatePickerDialog:onDateAccept()" + value.toString())
397            }
398          })
399        })
400    }.width('100%')
401  }
402}
403```
404
405![DataPickerDialog](figures/DatePickerDialogDemo5.png)
406
407### 示例6(设置弹窗背板)
408
409该示例通过backgroundColor、backgroundBlurStyle、shadow设置弹窗背板。
410
411```ts
412// xxx.ets
413@Entry
414@Component
415struct DatePickerDialogExample {
416  selectedDate: Date = new Date("2010-1-1")
417
418  build() {
419    Column() {
420      Button("DatePickerDialog")
421        .margin(20)
422        .onClick(() => {
423          this.getUIContext().showDatePickerDialog({
424            start: new Date("2000-1-1"),
425            end: new Date("2100-12-31"),
426            selected: this.selectedDate,
427            backgroundColor: 'rgb(204, 226, 251)',
428            backgroundBlurStyle: BlurStyle.NONE,
429            shadow: ShadowStyle.OUTER_FLOATING_SM,
430            onDateAccept: (value: Date) => {
431              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
432              this.selectedDate = value
433              console.info("DatePickerDialog:onDateAccept()" + value.toString())
434            }
435          })
436        })
437    }.width('100%')
438  }
439}
440```
441
442![DataPickerDialog](figures/DatePickerDialogDemo6.png)
443
444### 示例7(设置公历农历)
445
446该示例通过lunar、lunarSwitch设置弹窗显示公历或农历。
447
448```ts
449// xxx.ets
450@Entry
451@Component
452struct DatePickerDialogExample {
453  selectedDate: Date = new Date("2010-1-1")
454
455  build() {
456    Column() {
457      Button("DatePickerDialog")
458        .margin(20)
459        .onClick(() => {
460          this.getUIContext().showDatePickerDialog({
461            start: new Date("2000-1-1"),
462            end: new Date("2100-12-31"),
463            selected: this.selectedDate,
464            lunar: false,
465            onDateAccept: (value: Date) => {
466              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
467              this.selectedDate = value
468              console.info("DatePickerDialog:onDateAccept()" + value.toString())
469            }
470          })
471        })
472
473      Button("Lunar DatePickerDialog")
474        .margin(20)
475        .onClick(() => {
476          this.getUIContext().showDatePickerDialog({
477            start: new Date("2000-1-1"),
478            end: new Date("2100-12-31"),
479            selected: this.selectedDate,
480            lunar: true,
481            lunarSwitch: true,
482            onDateAccept: (value: Date) => {
483              this.selectedDate = value
484              console.info("DatePickerDialog:onDateAccept()" + value.toString())
485            }
486          })
487        })
488    }.width('100%')
489  }
490}
491```
492
493![DataPickerDialog](figures/DatePickerDialogDemo7.gif)
494
495### 示例8(设置显示月、日列)
496
497该示例通过配置mode参数实现显示月、日两列。
498
499```ts
500// xxx.ets
501@Entry
502@Component
503struct DatePickerDialogExample {
504  selectedDate: Date = new Date("2010-1-1")
505
506  build() {
507    Column() {
508      Button("DatePickerDialog")
509        .margin(20)
510        .onClick(() => {
511          this.getUIContext().showDatePickerDialog({
512            start: new Date("2000-1-1"),
513            end: new Date("2100-12-31"),
514            selected: this.selectedDate,
515            mode: DatePickerMode.MONTH_AND_DAY,
516            onDateAccept: (value: Date) => {
517              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
518              this.selectedDate = value
519              console.info("DatePickerDialog:onDateAccept()" + value.toString())
520            }
521          })
522        })
523    }.width('100%')
524  }
525}
526```
527
528![DataPickerDialog](figures/DatePickerDialogDemo8.gif)
529