• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 日历选择器弹窗 (CalendarPickerDialog)
2
3点击日期弹出日历选择器弹窗,可选择弹窗内任意日期。
4
5> **说明:**
6>
7> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](../js-apis-arkui-UIContext.md#uicontext)说明。
10
11## CalendarPickerDialog
12
13### show
14
15static show(options?: CalendarDialogOptions)
16
17定义日历选择器弹窗并弹出。
18
19**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
20
21**系统能力:** SystemCapability.ArkUI.ArkUI.Full
22
23**参数:**
24
25| 参数名  | 类型                                                    | 必填 | 说明                       |
26| ------- | ------------------------------------------------------- | ---- | -------------------------- |
27| options | [CalendarDialogOptions](#calendardialogoptions对象说明) | 否   | 配置日历选择器弹窗的参数。 |
28
29## CalendarDialogOptions对象说明
30
31继承自[CalendarOptions](ts-basic-components-calendarpicker.md#calendaroptions对象说明)。
32
33**系统能力:** SystemCapability.ArkUI.ArkUI.Full
34
35| 名称       | 类型                                            | 必填 | 说明                                                        |
36| ---------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
37| onAccept   | [Callback](ts-types.md#callback12)\<Date> | 否   | 点击弹窗中的“确定”按钮时触发该回调。<br/>返回选中的日期值。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
38| onCancel   | [VoidCallback](ts-types.md#voidcallback12) | 否   | 点击弹窗中的“取消”按钮时触发该回调。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                         |
39| onChange   | [Callback](ts-types.md#callback12)\<Date> | 否   | 选择弹窗中日期使当前选中项改变时触发该回调。<br/>返回选中的日期值。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
40| backgroundColor<sup>11+</sup> | [ResourceColor](ts-types.md#resourcecolor)  | 否 | 弹窗背板颜色。<br/>默认值:Color.Transparent<br/>**说明:** <br/>当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则颜色显示将不符合预期效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
41| 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开始,该接口支持在原子化服务中使用。 |
42| acceptButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](ts-methods-datepicker-dialog.md#pickerdialogbuttonstyle12类型说明) | 否 | 设置确认按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br />acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,二者primary字段均配置为true时均不生效。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
43| cancelButtonStyle<sup>12+</sup> | [PickerDialogButtonStyle](ts-methods-datepicker-dialog.md#pickerdialogbuttonstyle12类型说明) | 否 | 设置取消按钮显示样式、样式和重要程度、角色、背景色、圆角、文本颜色、字号、字体粗细、字体样式、字体列表、按钮是否默认响应Enter键。<br />**说明:**<br />acceptButtonStyle与cancelButtonStyle中最多只能有一个primary字段配置为true,二者primary字段均配置为true时均不生效。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
44| onDidAppear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗弹出时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.在onDidAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。<br />3.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。<br />4. 当弹窗入场动效未完成时关闭弹窗,该回调不会触发。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
45| onDidDisappear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗消失时的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
46| onWillAppear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗显示动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.在onWillAppear内设置改变弹窗显示效果的回调事件,二次弹出生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
47| onWillDisappear<sup>12+</sup> | [VoidCallback](ts-types.md#voidcallback12) | 否 | 弹窗退出动效前的事件回调。<br />**说明:**<br />1.正常时序依次为:onWillAppear>>onDidAppear>>(onAccept/onCancel/onChange)>>onWillDisappear>>onDidDisappear。<br />2.快速点击弹出,消失弹窗时,存在onWillDisappear在onDidAppear前生效。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
48| 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开始,该接口支持在原子化服务中使用。|
49| enableHoverMode<sup>14+</sup>     | boolean | 否   | 是否响应悬停态。<br />默认值:false,默认不响应。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
50| hoverModeArea<sup>14+</sup>       | [HoverModeAreaType](ts-appendix-enums.md#hovermodeareatype14) | 否   | 悬停态下弹窗默认展示区域。<br />默认值:HoverModeAreaType.BOTTOM_SCREEN。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
51
52> **说明:**
53>
54> 在应用窗口缩小过程中,弹窗的宽度会被不断压缩,当缩小到一定程度时会导致其内容无法完整显示,保证CalendarPickerDialog内容能够完整显示的最小窗口宽度为386vp。
55
56## 示例
57
58### 示例1(弹出日历选择弹窗)
59
60该示例通过点击按钮弹出日历选择弹窗。
61
62```ts
63// xxx.ets
64@Entry
65@Component
66struct CalendarPickerDialogExample {
67  private selectedDate: Date = new Date('2024-04-23')
68
69  build() {
70    Column() {
71      Button("Show CalendarPicker Dialog")
72        .margin(20)
73        .onClick(() => {
74          console.info("CalendarDialog.show")
75          CalendarPickerDialog.show({
76            selected: this.selectedDate,
77            onAccept: (value) => {
78              console.info("calendar onAccept:" + JSON.stringify(value))
79            },
80            onCancel: () => {
81              console.info("calendar onCancel")
82            },
83            onChange: (value) => {
84              console.info("calendar onChange:" + JSON.stringify(value))
85            },
86            onDidAppear: () => {
87              console.info("calendar onDidAppear")
88            },
89            onDidDisappear: () => {
90              console.info("calendar onDidDisappear")
91            },
92            onWillAppear: () => {
93              console.info("calendar onWillAppear")
94            },
95            onWillDisappear: () => {
96              console.info("calendar onWillDisappear")
97            }
98          })
99        })
100    }.width('100%')
101  }
102}
103```
104
105![CalendarPickerDialog](figures/CalendarPickerDialog.gif)
106
107### 示例2(自定义按钮样式)
108
109该示例通过配置 acceptButtonStyle、cancelButtonStyle实现自定义按钮样式。
110
111```ts
112// xxx.ets
113@Entry
114@Component
115struct CalendarPickerDialogExample {
116  private selectedDate: Date = new Date()
117  build() {
118    Column() {
119      Button("Show CalendarPicker Dialog")
120        .margin(20)
121        .onClick(() => {
122          console.info("CalendarDialog.show")
123          CalendarPickerDialog.show({
124            selected: this.selectedDate,
125            acceptButtonStyle: { type: ButtonType.Normal, style: ButtonStyleMode.NORMAL, role: ButtonRole.NORMAL, fontColor: Color.Red,
126              fontSize: '26fp', fontWeight: FontWeight.Bolder, fontStyle: FontStyle.Normal, fontFamily: 'sans-serif', backgroundColor:'#80834511',
127              borderRadius: 20 },
128            cancelButtonStyle: { type: ButtonType.Normal, style: ButtonStyleMode.NORMAL, role: ButtonRole.NORMAL, fontColor: Color.Blue,
129              fontSize: '16fp', fontWeight: FontWeight.Normal, fontStyle: FontStyle.Italic, fontFamily: 'sans-serif', backgroundColor:'#50182431',
130              borderRadius: 10 },
131            onAccept: (value) => {
132              console.info("calendar onAccept:" + JSON.stringify(value))
133            },
134            onCancel: () => {
135              console.info("calendar onCancel")
136            },
137            onChange: (value) => {
138              console.info("calendar onChange:" + JSON.stringify(value))
139            },
140            onDidAppear: () => {
141              console.info("calendar onDidAppear")
142            },
143            onDidDisappear: () => {
144              console.info("calendar onDidDisappear")
145            },
146            onWillAppear: () => {
147              console.info("calendar onWillAppear")
148            },
149            onWillDisappear: () => {
150              console.info("calendar onWillDisappear")
151            }
152          })
153        })
154    }.width('100%')
155  }
156}
157```
158
159![CalendarPickerDialog](figures/CalendarPickerDialog_CustomButton.png)
160
161### 示例3(悬停态弹窗)
162
163该示例展示了在折叠屏悬停态下设置dialog布局区域的效果。
164
165```ts
166@Entry
167@Component
168struct CalendarPickerDialogExample {
169  private selectedDate: Date = new Date('2024-04-23');
170
171  build() {
172    Column() {
173      Button("Show CalendarPicker Dialog")
174        .margin(20)
175        .onClick(() => {
176          console.info("CalendarDialog.show")
177          CalendarPickerDialog.show({
178            selected: this.selectedDate,
179            onAccept: (value) => {
180              console.info("calendar onAccept:" + JSON.stringify(value))
181            },
182            onCancel: () => {
183              console.info("calendar onCancel")
184            },
185            onChange: (value) => {
186              console.info("calendar onChange:" + JSON.stringify(value))
187            },
188            onDidAppear: () => {
189              console.info("calendar onDidAppear")
190            },
191            onDidDisappear: () => {
192              console.info("calendar onDidDisappear")
193            },
194            onWillAppear: () => {
195              console.info("calendar onWillAppear")
196            },
197            onWillDisappear: () => {
198              console.info("calendar onWillDisappear")
199            },
200            enableHoverMode: true,
201            hoverModeArea: HoverModeAreaType.TOP_SCREEN,
202          })
203        })
204    }.width('100%')
205  }
206}
207```
208
209![CalendarPickerDialog](figures/CalendarPickerDialog_HoverMode.gif)