• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Popup控制
2
3给组件绑定Popup弹窗,并设置弹窗内容,交互逻辑和显示状态。
4
5>  **说明:**
6>
7>  - 从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9>  - Popup弹窗的显示状态在onStateChange事件回调中反馈,其显隐与组件的创建或销毁无强对应关系。
10
11## bindPopup
12
13bindPopup(show: boolean, popup: PopupOptions | CustomPopupOptions)
14
15给组件绑定Popup弹窗。
16
17**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
18
19**系统能力:** SystemCapability.ArkUI.ArkUI.Full
20
21**参数:**
22
23| 参数名 | 类型                                                         | 必填 | 说明                                                         |
24| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
25| show   | boolean                                                      | 是   | 弹窗显示状态,默认值为false,隐藏弹窗。Popup弹窗必须等待页面全部构建完成才能展示,因此show不能在页面构建中设置为true,否则会导致Popup弹窗显示位置及形状错误。该参数从API version 13开始支持[!!语法](../../../ui/state-management/arkts-new-binding.md#系统组件参数双向绑定)双向绑定变量。 |
26| popup  | [PopupOptions](#popupoptions类型说明)&nbsp;\|&nbsp;[CustomPopupOptions](#custompopupoptions8类型说明)<sup>8+</sup> | 是   | 配置弹出弹窗的参数。                                         |
27
28## PopupOptions类型说明
29
30**系统能力:** SystemCapability.ArkUI.ArkUI.Full
31
32| 名称                                  | 类型                                                         | 必填 | 说明                                                      |
33| ------------------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
34| message                               | string                                                       | 是   | 弹窗信息内容。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                               |
35| placementOnTop<sup>(deprecated)</sup> | boolean                                                      | 否   | 是否在组件上方显示,默认值为false。<br />**说明:**<br />从 API version 10 开始废弃,建议使用`placement`替代。 |
36| primaryButton                         | {<br/>value:&nbsp;string,<br/>action:&nbsp;()&nbsp;=&gt;&nbsp;void<br/>} | 否   | 第一个按钮。<br/>value:弹窗里主按钮的文本。<br/>action:点击主按钮的回调函数。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
37| secondaryButton                       | {<br/>value:&nbsp;string,<br/>action:&nbsp;()&nbsp;=&gt;&nbsp;void<br/>} | 否   | 第二个按钮。<br/>value:弹窗里辅助按钮的文本。<br/>action:点击辅助按钮的回调函数。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
38| onStateChange                         | (event:&nbsp;{&nbsp;isVisible:&nbsp;boolean&nbsp;})&nbsp;=&gt;&nbsp;void | 否   | 弹窗状态变化事件回调,参数isVisible为弹窗当前的显示状态。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。    |
39| arrowOffset<sup>9+</sup>              | [Length](ts-types.md#length)                                 | 否   | Popup箭头在弹窗处的偏移。箭头在气泡上下方时,数值为0表示箭头居最左侧,偏移量为箭头至最左侧的距离,默认居中。箭头在气泡左右侧时,偏移量为箭头至最上侧的距离,默认居中。如果显示在屏幕边缘,气泡会自动左右偏移,数值为0时箭头始终指向绑定组件。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
40| showInSubWindow<sup>9+</sup>          | boolean                                                      | 否   | 取值为true时,气泡会显示在创建的子窗里,取值为false时,气泡会显示在对应的主窗中。<br />默认值:false<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                        |
41| mask<sup>10+</sup>                    | boolean&nbsp;\|&nbsp;{ color : [ResourceColor](ts-types.md#resourcecolor) }| 否   | 设置气泡是否有遮罩层及遮罩颜色。如果设置为false,则没有遮罩层;如果设置为true,则设置有遮罩层并且颜色为透明色;如果设置为Color,则为遮罩层的颜色。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
42| messageOptions<sup>10+</sup>          | [PopupMessageOptions](#popupmessageoptions10类型说明)        | 否   | 设置弹窗信息文本参数。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                       |
43| targetSpace<sup>10+</sup>             | [Length](ts-types.md#length)                                 | 否   | 设置Popup与目标的间隙。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                      |
44| placement<sup>10+</sup>               | [Placement](ts-appendix-enums.md#placement8)                 | 否   | 设置Popup组件相对于目标的显示位置,默认值为Placement.Bottom。<br />如果同时设置了`placementOnTop`和`placement`,则以`placement`的设置生效。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
45| offset<sup>10+</sup>                  | [Position](ts-types.md#position)                            | 否   | 设置Popup组件相对于placement设置的显示位置的偏移。<br />**说明:**<br />不支持设置百分比。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
46| enableArrow<sup>10+</sup>             | boolean                                                      | 否   | 设置是否显示箭头。<br/>默认值:true<br/>**说明:** <br/>当页面可用空间无法让气泡完全避让时,气泡会覆盖到组件上并且不显示箭头。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
47| popupColor<sup>11+</sup>              | [Color](ts-appendix-enums.md#color) &nbsp;\|&nbsp;string&nbsp;\|&nbsp;number&nbsp; \|&nbsp; [Resource](ts-types.md#resource) | 否   | 提示气泡的颜色。如需去除模糊背景填充效果,需将backgroundBlurStyle设置为BlurStyle.NONE。<br/>默认值:透明色[TRANSPARENT](ts-appendix-enums.md#color)加模糊背景填充效果[COMPONENT_ULTRA_THICK](ts-universal-attributes-background.md#blurstyle9)。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
48| autoCancel<sup>11+</sup>              | boolean                                                      | 否   | 页面有操作时,是否自动关闭气泡。<br/>默认值:true <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。           |
49| width<sup>11+</sup>                   | [Dimension](ts-types.md#dimension10)                         | 否   | 弹窗宽度。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
50| arrowPointPosition<sup>11+</sup>      | [ArrowPointPosition](ts-appendix-enums.md#arrowpointposition11) | 否   | 气泡尖角相对于父组件显示位置,气泡尖角在垂直和水平方向上有 ”Start“、”Center“、”End“三个位置点可选。以上所有位置点均位于父组件区域的范围内,不会超出父组件的边界范围。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
51| arrowWidth<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置箭头宽度。若所设置的箭头宽度超过所在边的长度减去两倍的气泡圆角大小,则不绘制气泡箭头。<br/>默认值:16<br/>单位:vp<br/>**说明:**<br />不支持设置百分比。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
52| arrowHeight<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置箭头高度。<br/>默认值:8<br/>单位:vp<br/>**说明:**<br />不支持设置百分比。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
53| radius<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置气泡圆角半径。<br/>默认值:20<br/>单位:vp<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
54| shadow<sup>11+</sup>             | [ShadowOptions](ts-universal-attributes-image-effect.md#shadowoptions对象说明)&nbsp;\|&nbsp;[ShadowStyle](ts-universal-attributes-image-effect.md#shadowstyle10枚举说明)    | 否   | 设置气泡阴影。<br/>默认值:ShadowStyle.OUTER_DEFAULT_MD <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。     |
55| backgroundBlurStyle<sup>11+</sup> | [BlurStyle](ts-universal-attributes-background.md#blurstyle9) | 否 | 设置气泡模糊背景参数。<br />默认值:BlurStyle.COMPONENT_ULTRA_THICK<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
56| transition<sup>12+</sup> | [TransitionEffect](ts-transition-animation-component.md#transitioneffect10对象说明) | 否 | 自定义设置Popup弹窗显示和退出的动画效果。<br/>**说明:**<br/>1.如果不设置,则使用默认的显示/退出动效。<br/>2.显示动效中按back键,打断显示动效,执行退出动效,动画效果为显示动效与退出动效的曲线叠加后的效果。<br/>3.退出动效中按back键,不会打断退出动效,退出动效继续执行,back键不被响应。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
57| onWillDismiss<sup>12+</sup>           | boolean \| Callback\<([DismissPopupAction](#dismisspopupaction12类型说明))> | 否   | 设置Popup交互式关闭拦截开关及拦截回调函数,默认值为true,Popup响应点击、左滑/右滑、三键back。<br />1.当为boolean类型时,如果设置为false,则不响应点击、左滑/右滑、三键back或键盘ESC退出事件,仅当设置“弹窗显示状态”参数show值为false时才退出;如果设置为true,则正常响应退出事件;<br />2.如果设置为函数类型,则拦截退出事件且执行回调函数。<br />**说明:**<br />在onWillDismiss回调中,不能再做onWillDismiss拦截。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
58| followTransformOfTarget<sup>13+</sup>          | boolean | 否   | 气泡绑定的宿主组件或其宿主组件的父容器添加了旋转、缩放等变换时,气泡是否能显示在对应变化后的位置上。<br/>默认值:false <br/>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
59| keyboardAvoidMode<sup>15+</sup>          | [KeyboardAvoidMode](ts-types.md#keyboardavoidmode12枚举说明) | 否   | 气泡是否避让软键盘,默认不避让。设置为避让后,气泡显示空间不足时,由原先居中覆盖父组件的方式改为平移覆盖父组件,且气泡箭头不指向宿主时,不再显示箭头。<br/>默认值:KeyboardAvoidMode.NONE <br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
60|  enableHoverMode<sup>18+</sup>| boolean  | 否   | Popup组件是否响应悬停态变化。如果Popup的点击位置在悬停态折痕区域,Popup组件不会响应悬停态。默认值:false,Popup组件不响应悬停态变化。<br />**说明:** <br />enableHoverMode为 false,未设置或者值为非法值时,Popup组件不会响应悬停态,enableHoverMode为true时,响应悬停态。<br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
61
62## PopupMessageOptions<sup>10+</sup>类型说明
63
64**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
65
66**系统能力:** SystemCapability.ArkUI.ArkUI.Full
67
68| 名称      | 类型                                       | 必填 |说明                                                       |
69| --------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
70| textColor | [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置弹窗信息文本颜色。                                       |
71| font      | [Font](ts-types.md#font)                   | 否   | 设置弹窗信息字体属性。<br/>**说明:** <br/>不支持设置family。 |
72
73## DismissPopupAction<sup>12+</sup>类型说明
74
75**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79| 名称    | 类型                                      | 必填 | 说明                                                       |
80| ------- | ----------------------------------------- | ---- | --------------------------------------------------------------- |
81| dismiss | function                                  | 是   | Popup关闭回调函数。开发者需要退出时调用,不需要退出时无需调用。 |
82| reason  | [DismissReason](#dismissreason12枚举说明) | 是   | 关闭原因,返回本次拦截Popup消失的事件原因。                       |
83
84## DismissReason<sup>12+</sup>枚举说明
85
86**系统能力:** SystemCapability.ArkUI.ArkUI.Full
87
88| 名称          | 说明        |
89| ------------- | ------------------ |
90| PRESS_BACK    | 点击Back键。       |
91| TOUCH_OUTSIDE | 点击组件外部区域。 |
92
93## CustomPopupOptions<sup>8+</sup>类型说明
94
95**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96
97| 名称                           | 类型                                       | 必填   | 说明                                       |
98| ---------------------------- | ---------------------------------------- | ---- | ---------------------------------------- |
99| builder                      | [CustomBuilder](ts-types.md#custombuilder8) | 是    | 提示气泡内容的构造器。<br />**说明:**<br />Popup为通用属性,自定义Popup中不支持再次弹出Popup。对builder下的第一层容器组件不支持使用position属性,如果使用将导致气泡不显示。builder中若使用自定义组件,自定义组件的aboutToAppear和aboutToDisappear生命周期与Popup弹窗的显隐无关,不能使用其生命周期判断Popup弹窗的显隐。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                              |
100| placement                    | [Placement](ts-appendix-enums.md#placement8) | 否    | 气泡组件优先显示的位置,当前位置显示不下时,会自动调整位置。<br/>默认值:Placement.Bottom<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
101| popupColor                   | number&nbsp;\|&nbsp;[Color](ts-types.md#color)&nbsp;\|&nbsp;string&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 否    | 提示气泡的颜色。如需去除模糊背景填充效果,需将backgroundBlurStyle设置为BlurStyle.NONE。<br/>API version 10,默认值:'#4d4d4d'<br />API version 11及以后,默认值:透明色[TRANSPARENT](ts-appendix-enums.md#color)加模糊背景填充效果[COMPONENT_ULTRA_THICK](ts-universal-attributes-background.md#blurstyle9)<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
102| enableArrow                  | boolean                                  | 否    | 是否显示箭头。<br/>从API version 9开始,如果箭头所在方位侧的气泡长度不足以显示下箭头,则会默认不显示箭头。比如:placement设置为Left,此时如果气泡高度小于箭头的宽度(32vp)与气泡圆角两倍(48vp)之和(80vp),则实际不会显示箭头。<br/>默认值:true<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
103| autoCancel                   | boolean                                  | 否    | 页面有操作时,是否自动关闭气泡。<br/>默认值:true<br />**说明:**<br />如果要实现点击气泡内消失需要在builder中先放一个布局组件,然后再将Popup高级组件放在布局组件里面,再在布局组件的onClick事件中修改的传入bindPopup的变量(show:&nbsp;boolean)值。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
104| onStateChange                | (event:&nbsp;{&nbsp;isVisible:&nbsp;boolean&nbsp;})&nbsp;=&gt;&nbsp;void | 否    | 弹窗状态变化事件回调,参数为弹窗当前的显示状态。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                 |
105| arrowOffset<sup>9+</sup>     | [Length](ts-types.md#length) | 否    | Popup箭头在弹窗处的偏移。箭头在气泡上下方时,数值为0表示箭头居最左侧,偏移量为箭头至最左侧的距离,默认居中。箭头在气泡左右侧时,偏移量为箭头至最上侧的距离,默认居中。如果显示在屏幕边缘,气泡会自动左右偏移,数值为0时箭头始终指向绑定组件。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
106| showInSubWindow<sup>9+</sup> | boolean                                  | 否    | 取值为true时,气泡会显示在创建的子窗里,取值为false时,气泡会显示在对应的主窗中。<br />默认值:false<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                    |
107| maskColor<sup>(deprecated)</sup> | [Resource](ts-types.md#resource)&nbsp;\|&nbsp;string&nbsp;\|&nbsp;number&nbsp;\|&nbsp;&nbsp;[Color](ts-types.md#color) | 否   | 设置气泡遮罩层颜色。<br />**说明:**<br />从 API version 10 开始废弃,建议使用`mask`替代。 |
108| mask<sup>10+</sup>           | boolean&nbsp;\|&nbsp;{ color : [ResourceColor](ts-types.md#resourcecolor) }| 否    | 设置气泡是否有遮罩层及遮罩颜色。如果设置为false,则没有遮罩层;如果设置为true,则设置有遮罩层并且颜色为透明色;如果设置为Color,则为遮罩层的颜色。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
109| targetSpace<sup>10+</sup>    | [Length](ts-types.md#length)             | 否    | 设置Popup与目标的间隙。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                           |
110| offset<sup>10+</sup>         | [Position](ts-types.md#position)                            | 否   | 设置Popup组件相对于placement设置的显示位置的偏移。<br />**说明:**<br />不支持设置百分比。<br />**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
111| width<sup>11+</sup> | [Dimension](ts-types.md#dimension10) | 否 | 弹窗宽度。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
112| arrowPointPosition<sup>11+</sup> | [ArrowPointPosition](ts-appendix-enums.md#arrowpointposition11) | 否 | 气泡尖角相对于父组件显示位置,气泡尖角在垂直和水平方向上有 ”Start“、”Center“、”End“三个位置点可选。以上所有位置点均位于父组件区域的范围内,不会超出父组件的边界范围。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
113| arrowWidth<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                                                      | 否   | 设置箭头宽度。若所设置的箭头宽度超过所在边的长度减去两倍的气泡圆角大小,则不绘制气泡箭头。<br/>默认值:16<br/>单位:vp<br />**说明:**<br />不支持设置百分比。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
114| arrowHeight<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置箭头高度。<br/>默认值:8<br/>单位:vp<br />**说明:**<br />不支持设置百分比。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
115| radius<sup>11+</sup>             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置气泡圆角半径。<br/>默认值:20<br/>单位:vp<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                          |
116| shadow<sup>11+</sup>             | [ShadowOptions](ts-universal-attributes-image-effect.md#shadowoptions对象说明)&nbsp;\|&nbsp;[ShadowStyle](ts-universal-attributes-image-effect.md#shadowstyle10枚举说明)    | 否   | 设置气泡阴影。<br/>默认值:ShadowStyle.OUTER_DEFAULT_MD <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。     |
117| backgroundBlurStyle<sup>11+</sup> | [BlurStyle](ts-universal-attributes-background.md#blurstyle9) | 否 | 设置气泡模糊背景参数。<br />默认值:BlurStyle.COMPONENT_ULTRA_THICK <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
118| focusable<sup>11+</sup> | boolean | 否 | 设置气泡弹出后是否获焦。<br />默认值:false <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
119| transition<sup>12+</sup> | [TransitionEffect](ts-transition-animation-component.md#transitioneffect10对象说明) | 否 | 自定义设置Popup弹窗显示和退出的动画效果。<br/>**说明:**<br/>如果不设置,则使用默认的显示/退出动效。<br/>2.显示动效中按back键,打断显示动效,执行退出动效,动画效果为显示动效与退出动效的曲线叠加后的效果。<br/>3.退出动效中按back键,不会打断退出动效,退出动效继续执行,back键不被响应。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
120| onWillDismiss<sup>12+</sup>           | boolean \| Callback\<([DismissPopupAction](#dismisspopupaction12类型说明))> | 否   | 设置Popup交互式关闭拦截开关及拦截回调函数,默认值为true,Popup响应点击、左滑/右滑、三键back。<br />1.当为boolean类型时,如果设置为false,则不响应点击、左滑/右滑、三键back或键盘ESC退出事件,仅当设置“弹窗显示状态”参数show值为false时才退出;如果设置为true,则正常响应退出事件;<br />2.如果设置为函数类型,则拦截退出事件且执行回调函数。<br />**说明:**<br />在onWillDismiss回调中,不能再做onWillDismiss拦截。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
121| followTransformOfTarget<sup>13+</sup>          | boolean | 否   | 气泡绑定的宿主组件或其宿主组件的父容器添加了旋转、缩放等变换时,气泡是否能显示在对应变化后的位置上。<br/>默认值:false <br/>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。 |
122| keyboardAvoidMode<sup>15+</sup>          | [KeyboardAvoidMode](ts-types.md#keyboardavoidmode12枚举说明) | 否   | 气泡是否避让软键盘,默认不避让。设置为避让后,气泡显示空间不足时,由原先居中覆盖父组件的方式改为平移覆盖父组件,且气泡箭头不指向宿主时,不再显示箭头。<br/>默认值:KeyboardAvoidMode.NONE <br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
123|enableHoverMode<sup>18+</sup>  | boolean  | 否   |  Popup组件是否响应悬停态变化。如果Popup的点击位置在悬停态折痕区域,Popup组件不会响应悬停态。默认值:false,Popup组件不响应悬停态变化。<br />**说明:** <br />enableHoverMode为false,未设置或者值为非法值时,Popup组件不会响应悬停态,enableHoverMode为true时,响应悬停态。<br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 |
124
125## PopupCommonOptions<sup>18+</sup>类型说明
126
127配置弹出弹窗的参数。使用[UIContext](../js-apis-arkui-UIContext.md#uicontext)中的[getPromptAction()](../js-apis-arkui-UIContext.md#getpromptaction)方法获取到[PromptAction](../js-apis-arkui-UIContext.md#promptaction)对象,再通过该对象调用[openPopup](../js-apis-arkui-UIContext.md#openpopup18)和[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)时options的属性。
128
129**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
130
131**系统能力:** SystemCapability.ArkUI.ArkUI.Full
132
133| 名称                           | 类型                                       | 必填   | 说明                                       |
134| ---------------------------- | ---------------------------------------- | ---- | ---------------------------------------- |
135| placement                    | [Placement](ts-appendix-enums.md#placement8) | 否    | 气泡组件优先显示的位置,当前位置显示不下时,会自动调整位置。<br/>默认值:Placement.Bottom |
136| popupColor                   | [ResourceColor](ts-types.md#resourcecolor) | 否    | 提示气泡的颜色。如需去除模糊背景填充效果,需将backgroundBlurStyle设置为BlurStyle.NONE。默认值:透明色[TRANSPARENT](ts-appendix-enums.md#color)加模糊背景填充效果[COMPONENT_ULTRA_THICK](ts-universal-attributes-background.md#blurstyle9)。 |
137| enableArrow                  | boolean                                  | 否    | 是否显示箭头。<br/>如果箭头所在方位侧的气泡长度不足以显示下箭头,则会默认不显示箭头。比如:placement设置为Left,此时如果气泡高度小于箭头的宽度(32vp)与气泡圆角两倍(48vp)之和(80vp),则实际不会显示箭头。<br/>默认值:true |
138| autoCancel                   | boolean                                  | 否    | 页面有操作时,是否自动关闭气泡。<br/>默认值:true |
139| onStateChange                | [PopupStateChangeCallback](#popupstatechangecallback18类型说明) | 否    | 弹窗状态变化事件回调。<br />**说明:**<br />不支持通过[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)进行更新。 |
140| arrowOffset     | [Length](ts-types.md#length) | 否    | Popup箭头在弹窗处的偏移。箭头在气泡上下方时,数值为0表示箭头居最左侧,偏移量为箭头至最左侧的距离,默认居中。箭头在气泡左右侧时,偏移量为箭头至最上侧的距离,默认居中。如果显示在屏幕边缘,气泡会自动左右偏移,数值为0时箭头始终指向绑定组件。 |
141| showInSubWindow | boolean                                  | 否    | 取值为true时,气泡会显示在创建的子窗里,取值为false时,气泡会显示在对应的主窗中。<br />默认值:false<br />**说明:**<br />不支持通过[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)进行更新。 |
142| mask           | boolean&nbsp;\|&nbsp;[PopupMaskType](#popupmasktype18类型说明) | 否    | 设置气泡是否有遮罩层及遮罩颜色。如果设置为false,则没有遮罩层;如果设置为true,则设置有遮罩层并且颜色为透明色;如果设置为PopupMaskType,则为遮罩层的颜色。 |
143| targetSpace    | [Length](ts-types.md#length)             | 否    | 设置Popup与目标的间隙。 |
144| offset         | [Position](ts-types.md#position)                            | 否   | 设置Popup组件相对于placement设置的显示位置的偏移。<br />**说明:**<br />不支持设置百分比。 |
145| width | [Dimension](ts-types.md#dimension10) | 否 | 弹窗宽度。 |
146| arrowPointPosition | [ArrowPointPosition](ts-appendix-enums.md#arrowpointposition11) | 否 | 气泡尖角相对于父组件显示位置,气泡尖角在垂直和水平方向上有 ”Start“、”Center“、”End“三个位置点可选。以上所有位置点均位于父组件区域的范围内,不会超出父组件的边界范围。 |
147| arrowWidth             | [Dimension](ts-types.md#dimension10)                                                      | 否   | 设置箭头宽度。若所设置的箭头宽度超过所在边的长度减去两倍的气泡圆角大小,则不绘制气泡箭头。<br/>默认值:16<br/>单位:vp<br />**说明:**<br />不支持设置百分比。 |
148| arrowHeight             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置箭头高度。<br/>默认值:8<br/>单位:vp<br />**说明:**<br />不支持设置百分比。 |
149| radius             | [Dimension](ts-types.md#dimension10)                  | 否   | 设置气泡圆角半径。<br/>默认值:20<br/>单位:vp |
150| shadow             | [ShadowOptions](ts-universal-attributes-image-effect.md#shadowoptions对象说明)&nbsp;\|&nbsp;[ShadowStyle](ts-universal-attributes-image-effect.md#shadowstyle10枚举说明)    | 否   | 设置气泡阴影。<br/>默认值:ShadowStyle.OUTER_DEFAULT_MD |
151| backgroundBlurStyle | [BlurStyle](ts-universal-attributes-background.md#blurstyle9) | 否 | 设置气泡模糊背景参数。<br />默认值:BlurStyle.COMPONENT_ULTRA_THICK |
152| focusable | boolean | 否 | 设置气泡弹出后是否获焦。<br />默认值:false<br />**说明:**<br />不支持通过[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)进行更新。 |
153| transition | [TransitionEffect](ts-transition-animation-component.md#transitioneffect10对象说明) | 否 | 自定义设置Popup弹窗显示和退出的动画效果。<br/>**说明:**<br/>1.如果不设置,则使用默认的显示/退出动效。<br/>2.显示动效中按back键,打断显示动效,执行退出动效,动画效果为显示动效与退出动效的曲线叠加后的效果。<br/>3.退出动效中按back键,不会打断退出动效,退出动效继续执行,back键不被响应。<br/>4.不支持通过[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)进行更新。 |
154| onWillDismiss           | boolean\|Callback<[DismissPopupAction](#dismisspopupaction12类型说明)> | 否   | 设置Popup交互式关闭拦截开关及拦截回调函数,默认值为true,Popup响应点击、左滑/右滑、三键back。<br />1.当为boolean类型时,如果设置为false,则不响应点击、左滑/右滑、三键back或键盘ESC退出事件,仅当设置“弹窗显示状态”参数show值为false时才退出;如果设置为true,则正常响应退出事件;<br />2.如果设置为函数类型,则拦截退出事件且执行回调函数。<br />**说明:**<br />1.在onWillDismiss回调中,不能再做onWillDismiss拦截。<br />2.不支持通过[updatePopup](../js-apis-arkui-UIContext.md#updatepopup18)进行更新。 |
155| followTransformOfTarget          | boolean | 否   | 气泡绑定的宿主组件或其宿主组件的父容器添加了旋转、缩放等变换时,气泡是否能显示在对应变化后的位置上。<br/>默认值:false |
156|enableHoverMode  | boolean  | 否   |  Popup组件是否响应悬停态变化。如果Popup的点击位置在悬停态折痕区域,Popup组件不会响应悬停态。默认值:false,Popup组件不响应悬停态变化。<br />**说明:** <br />enableHoverMode为false,未设置或者值为非法值时,Popup组件不会响应悬停态,enableHoverMode为true时,响应悬停态。 |
157
158## PopupStateChangeParam<sup>18+</sup>类型说明
159
160弹窗当前的显示状态。
161
162**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
163
164**系统能力:** SystemCapability.ArkUI.ArkUI.Full
165
166| 名称      | 类型                                       | 必填 | 说明                                                         |
167| --------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
168| isVisible | boolean | 是   | 弹窗当前的显示状态。                                       |
169
170## PopupStateChangeCallback<sup>18+</sup>类型说明
171
172弹窗状态变化事件回调。
173
174type PopupStateChangeCallback = (event: PopupStateChangeParam) => void;
175
176**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
177
178**系统能力:** SystemCapability.ArkUI.ArkUI.Full
179
180**参数:**
181
182| 参数名      | 类型                                       | 必填 | 说明                                                         |
183| --------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
184| event  | [PopupStateChangeParam](#popupstatechangeparam18类型说明) | 是   | 弹窗当前的显示状态。                                       |
185
186## PopupMaskType<sup>18+</sup>类型说明
187
188设置遮罩层颜色。
189
190**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
191
192**系统能力:** SystemCapability.ArkUI.ArkUI.Full
193
194| 名称      | 类型                                       | 必填 | 说明                                                         |
195| --------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
196| color | [ResourceColor](ts-types.md#resourcecolor) | 是   | 设置遮罩层颜色。                                       |
197
198## 示例
199
200### 示例1(弹出不同类型的气泡)
201
202该示例为bindPopup通过配置Popup弹出PopupOptions、CustomPopupOptions类型的气泡。
203
204```ts
205// xxx.ets
206@Entry
207@Component
208struct PopupExample {
209  @State handlePopup: boolean = false;
210  @State customPopup: boolean = false;
211
212  // Popup构造器定义弹框内容
213  @Builder popupBuilder() {
214    Row({ space: 2 }) {
215      Image($r("app.media.icon")).width(24).height(24).margin({ left: -5 })
216      Text('Custom Popup').fontSize(10)
217    }.width(100).height(50).padding(5)
218  }
219
220  build() {
221    Flex({ direction: FlexDirection.Column }) {
222      // PopupOptions 类型设置弹框内容
223      Button('PopupOptions')
224        .onClick(() => {
225          this.handlePopup = !this.handlePopup;
226        })
227        .bindPopup(this.handlePopup, {
228          message: 'This is a popup with PopupOptions',
229          placementOnTop: true,
230          showInSubWindow:false,
231          // 设置气泡避让软键盘
232          keyboardAvoidMode: KeyboardAvoidMode.DEFAULT,
233          primaryButton: {
234            value: 'confirm',
235            action: () => {
236              this.handlePopup = !this.handlePopup;
237              console.info('confirm Button click');
238            }
239          },
240          // 第二个按钮
241          secondaryButton: {
242            value: 'cancel',
243            action: () => {
244              this.handlePopup = !this.handlePopup;
245              console.info('cancel Button click');
246            }
247          },
248          onStateChange: (e) => {
249            console.info(JSON.stringify(e.isVisible))
250            if (!e.isVisible) {
251              this.handlePopup = false;
252            }
253          }
254        })
255        .position({ x: 100, y: 150 })
256
257
258      // CustomPopupOptions 类型设置弹框内容
259      Button('CustomPopupOptions')
260        .onClick(() => {
261          this.customPopup = !this.customPopup;
262        })
263        .bindPopup(this.customPopup, {
264          builder: this.popupBuilder,
265          placement: Placement.Top,
266          mask: {color:'#33000000'},
267          popupColor: Color.Yellow,
268          enableArrow: true,
269          // 设置气泡避让软键盘
270          keyboardAvoidMode: KeyboardAvoidMode.DEFAULT,
271          showInSubWindow: false,
272          onStateChange: (e) => {
273            if (!e.isVisible) {
274              this.customPopup = false;
275            }
276          }
277        })
278        .position({ x: 80, y: 300 })
279    }.width('100%').padding({ top: 5 })
280  }
281}
282```
283
284![](figures/popup.gif)
285
286### 示例2(设置气泡的文本样式)
287
288该示例为bindPopup通过配置messageOptions弹出自定义文本样式的气泡。
289
290```ts
291// xxx.ets
292
293@Entry
294@Component
295struct PopupExample {
296  @State handlePopup: boolean = false;
297
298  build() {
299    Column({ space: 100 }) {
300      Button('PopupOptions').margin(100)
301        .onClick(() => {
302          this.handlePopup = !this.handlePopup;
303        })
304        .bindPopup(this.handlePopup, {
305          // PopupOptions类型气泡的内容
306          message: 'This is a popup with PopupOptions',
307          messageOptions: {
308            // 气泡的文本样式
309            textColor: Color.Red,
310            font: {
311              size: '14vp',
312              style: FontStyle.Italic,
313              weight: FontWeight.Bolder
314            }
315          },
316          placement: Placement.Bottom,
317          enableArrow: false, // 气泡弹出时不显示箭头
318          targetSpace: '15vp',
319          onStateChange: (e) => {
320            console.info(JSON.stringify(e.isVisible));
321            if (!e.isVisible) {
322              this.handlePopup = false;
323            }
324          }
325        })
326    }.margin(20)
327  }
328}
329```
330
331![popup_02](figures/popup_02.gif)
332
333### 示例3(设置气泡的样式)
334
335该示例为bindPopup通过配置arrowHeight、arrowWidth、radius、shadow、popupColor,实现气泡箭头以及气泡本身的样式。
336
337```ts
338// xxx.ets
339
340@Entry
341@Component
342struct PopupExample {
343  @State customPopup: boolean = false;
344  @State handlePopup: boolean = false;
345
346  build() {
347    Column({ space: 100 }) {
348      Button("popup")
349        .margin({ top: 50 })
350        .onClick(() => {
351          this.customPopup = !this.customPopup;
352        })
353        .bindPopup(this.customPopup, {
354          message: "this is a popup",
355          arrowHeight: 20, // 设置气泡箭头高度
356          arrowWidth: 20, // 设置气泡箭头宽度
357          radius: 20, // 设置气泡的圆角
358          shadow: ShadowStyle.OUTER_DEFAULT_XS, // 设置气泡的阴影
359        })
360
361      Button('PopupOptions')
362        .onClick(() => {
363          this.handlePopup = !this.handlePopup;
364        })
365        .bindPopup(this.handlePopup, {
366          width: 300,
367          message: 'This is a popup with PopupOptions',
368          arrowPointPosition: ArrowPointPosition.START, // 设置箭头的位置
369          backgroundBlurStyle: BlurStyle.NONE, // 关闭气泡的模糊背景
370          popupColor: Color.Red, // 设置气泡的背景色
371          autoCancel: true,
372        })
373    }
374    .width('100%')
375  }
376}
377```
378
379![](figures/popup_04.gif)
380
381### 示例4(设置气泡的动效)
382
383该示例为bindPopup通过配置transition,实现气泡的显示和退出动效。
384
385```ts
386// xxx.ets
387@Entry
388@Component
389struct PopupExample {
390  @State handlePopup: boolean = false;
391  @State customPopup: boolean = false;
392
393  // Popup构造器定义弹框内容
394  @Builder popupBuilder() {
395    Row() {
396      Text('Custom Popup with transitionEffect').fontSize(10)
397    }.height(50).padding(5)
398  }
399
400  build() {
401    Flex({ direction: FlexDirection.Column }) {
402      // PopupOptions 类型设置弹框内容
403      Button('PopupOptions')
404        .onClick(() => {
405          this.handlePopup = !this.handlePopup;
406        })
407        .bindPopup(this.handlePopup, {
408          message: 'This is a popup with transitionEffect',
409          placementOnTop: true,
410          showInSubWindow: false,
411          onStateChange: (e) => {
412            console.info(JSON.stringify(e.isVisible))
413            if (!e.isVisible) {
414              this.handlePopup = false;
415            }
416          },
417          // 设置弹窗显示动效为透明度动效与平移动效的组合效果,无退出动效
418          transition:TransitionEffect.asymmetric(
419            TransitionEffect.OPACITY.animation({ duration: 1000, curve: Curve.Ease }).combine(
420              TransitionEffect.translate({ x: 50, y: 50 })),
421            TransitionEffect.IDENTITY)
422        })
423        .position({ x: 100, y: 150 })
424
425      // CustomPopupOptions 类型设置弹框内容
426      Button('CustomPopupOptions')
427        .onClick(() => {
428          this.customPopup = !this.customPopup;
429        })
430        .bindPopup(this.customPopup, {
431          builder: this.popupBuilder,
432          placement: Placement.Top,
433          showInSubWindow: false,
434          onStateChange: (e) => {
435            if (!e.isVisible) {
436              this.customPopup = false;
437            }
438          },
439          // 设置弹窗显示动效与退出动效为缩放动效
440          transition:TransitionEffect.scale({ x: 1, y: 0 }).animation({ duration: 500, curve: Curve.Ease })
441        })
442        .position({ x: 80, y: 300 })
443    }.width('100%').padding({ top: 5 })
444  }
445}
446```
447
448![](figures/popup_05.gif)
449
450### 示例5(为气泡添加事件)
451
452该示例为bindPopup通过配置onWillDismiss,实现当气泡退出时,拦截退出事件并执行回调函数。
453
454```ts
455// xxx.ets
456
457@Entry
458@Component
459struct PopupExample {
460  @State handlePopup: boolean = false;
461  build() {
462    Column() {
463      Button('PopupOptions')
464        .onClick(() => {
465          this.handlePopup = true;
466        })
467        .bindPopup(this.handlePopup, {
468          message: 'This is a popup with PopupOptions',
469          messageOptions: {
470            textColor: Color.Red,
471            font: {
472              size: '14vp',
473              style: FontStyle.Italic,
474              weight: FontWeight.Bolder
475            }
476          },
477          placement: Placement.Bottom,
478          enableArrow: false,
479          targetSpace: '15vp',
480          onStateChange: (e) => {
481            if (!e.isVisible) {
482              this.handlePopup = false;
483            }
484          },
485          onWillDismiss: (
486            (dismissPopupAction: DismissPopupAction) => {
487              console.info("dismissReason:" + JSON.stringify(dismissPopupAction.reason));
488              if (dismissPopupAction.reason === DismissReason.PRESS_BACK) {
489                dismissPopupAction.dismiss();
490              }
491            }
492          )
493        })
494    }.margin(20)
495  }
496}
497```
498
499![](figures/popup_004.gif)
500
501### 示例6(为气泡拦截退出事件)
502
503该示例通过配置onWillDismiss的boolean类型为false时,拦截气泡的退出事件。
504
505```ts
506// xxx.ets
507
508@Entry
509@Component
510struct PopupExample {
511  @State handlePopup: boolean = false;
512
513  build() {
514    Column() {
515      Button('PopupOptions')
516        .onClick(() => {
517          this.handlePopup = true;
518        })
519        .bindPopup(this.handlePopup, {
520          message: 'This is a popup with PopupOptions',
521          messageOptions: {
522            textColor: Color.Red,
523            font: {
524              size: '14vp',
525              style: FontStyle.Italic,
526              weight: FontWeight.Bolder
527            }
528          },
529          placement: Placement.Bottom,
530          enableArrow: false,
531          targetSpace: '15vp',
532          followTransformOfTarget: true,
533          onStateChange: (e) => {
534            let timer = setTimeout(() => {
535              this.handlePopup = false;
536            }, 6000);
537            if (!e.isVisible) {
538              this.handlePopup = false;
539              clearTimeout(timer);
540            }
541          },
542          onWillDismiss: false
543        })
544    }.margin(20)
545  }
546}
547```
548
549![](figures/popup_005.gif)
550