• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 气泡提示(Popup)
2
3
4Popup属性可绑定在组件上显示气泡弹窗提示,设置弹窗内容、交互逻辑和显示状态。主要用于屏幕录制、信息弹出提醒等显示状态。
5
6
7气泡分为两种类型,一种是系统提供的气泡[PopupOptions](../reference/arkui-ts/ts-universal-attributes-popup.md#popupoptions类型说明),一种是开发者可以自定义的气泡[CustomPopupOptions](../reference/arkui-ts/ts-universal-attributes-popup.md#custompopupoptions8类型说明)。其中PopupOptions为系统提供的气泡,通过配置primaryButton、secondaryButton来设置带按钮的气泡。CustomPopupOptions通过配置[builder](../quick-start/arkts-builder.md)参数来设置自定义的气泡。
8
9
10## 文本提示气泡
11
12文本提示气泡常用于只展示带有文本的信息提示,不带有任何交互的场景。Popup属性需绑定组件,当bindPopup属性中参数show为true的时候会弹出气泡提示。
13
14在Button组件上绑定Popup属性,每次点击Button按钮,handlePopup会切换布尔值,当其为true时,触发bindPopup弹出气泡。
15
16
17
18```ts
19@Entry
20@Component
21struct PopupExample {
22  @State handlePopup: boolean = false
23
24  build() {
25    Column() {
26      Button('PopupOptions')
27        .onClick(() => {
28          this.handlePopup = !this.handlePopup
29        })
30        .bindPopup(this.handlePopup, {
31          message: 'This is a popup with PopupOptions',
32        })
33    }.width('100%').padding({ top: 5 })
34  }
35}
36```
37
38
39![zh-cn_image_0000001511740524](figures/zh-cn_image_0000001511740524.png)
40
41
42## 带按钮的提示气泡
43
44通过primaryButton、secondaryButton属性为气泡最多设置两个Button按钮,通过此按钮进行简单的交互;开发者可以通过配置action参数来设置想要触发的操作。
45
46
47
48```ts
49@Entry
50@Component
51struct PopupExample22 {
52  @State handlePopup: boolean = false
53  build() {
54    Column() {
55      Button('PopupOptions').margin({top:200})
56        .onClick(() => {
57          this.handlePopup = !this.handlePopup
58        })
59        .bindPopup(this.handlePopup, {
60          message: 'This is a popup with PopupOptions',
61          primaryButton:{
62            value:'Confirm',
63            action: () => {
64              this.handlePopup = !this.handlePopup
65              console.info('confirm Button click')
66            }
67          },
68          secondaryButton: {
69            value: 'Cancel',
70            action: () => {
71              this.handlePopup = !this.handlePopup
72            }
73          },
74        })
75    }.width('100%').padding({ top: 5 })
76  }
77}
78```
79
80
81![zh-cn_other_0000001500740342](figures/zh-cn_other_0000001500740342.jpeg)
82
83
84## 自定义气泡
85
86开发者可以使用构建器CustomPopupOptions创建自定义气泡,\@Builder中可以放自定义的内容。除此之外,还可以通过popupColor等参数控制气泡样式。
87
88
89
90```ts
91@Entry
92@Component
93struct Index {
94  @State customPopup: boolean = false
95  // popup构造器定义弹框内容
96  @Builder popupBuilder() {
97    Row({ space: 2 }) {
98      Image($r("app.media.icon")).width(24).height(24).margin({ left: 5 })
99      Text('This is Custom Popup').fontSize(15)
100    }.width(200).height(50).padding(5)
101  }
102  build() {
103    Column() {
104      Button('CustomPopupOptions')
105        .position({x:100,y:200})
106        .onClick(() => {
107          this.customPopup = !this.customPopup
108        })
109        .bindPopup(this.customPopup, {
110          builder: this.popupBuilder, // 气泡的内容
111          placement:Placement.Bottom, // 气泡的弹出位置
112          popupColor:Color.Pink // 气泡的背景色
113        })
114    }
115    .height('100%')
116  }
117}
118```
119
120
121使用者通过配置placement参数将弹出的气泡放到需要提示的位置。弹窗构造器会触发弹出提示信息,来引导使用者完成操作,也让使用者有更好的UI体验。
122
123
124![zh-cn_other_0000001500900234](figures/zh-cn_other_0000001500900234.jpeg)
125
126
127
128```ts
129@Entry
130@Component
131struct Index {
132  @State customPopup: boolean = false
133  // popup构造器定义弹框内容
134  @Builder popupBuilder() {
135    Row({ space: 2 }) {
136      Image('/images/shengWhite.png').width(30).objectFit(ImageFit.Contain)
137      Column(){
138        Text('控制人生').fontSize(14).fontWeight(900).fontColor(Color.White).width('100%')
139        Text('想要跟唱时,数千万歌曲任你选择,人声随心调整。').fontSize(12).fontColor('#ffeeeeee').width('100%')
140      }
141    }.width(230).height(80).padding(5)
142  }
143  build() {
144    Row() {
145      Text('我要K歌')
146      Image('/images/sheng.png').width(35).objectFit(ImageFit.Contain)
147        .onClick(() => {
148          this.customPopup = !this.customPopup
149        })
150        .bindPopup(this.customPopup, {
151          builder: this.popupBuilder,
152        })
153    }
154    .margin(20)
155    .height('100%')
156  }
157}
158```
159