氣泡提示(Popup)

2024-01-25 13:17 更新

Popup屬性可綁定在組件上顯示氣泡彈窗提示,設(shè)置彈窗內(nèi)容、交互邏輯和顯示狀態(tài)。主要用于屏幕錄制、信息彈出提醒等顯示狀態(tài)。

氣泡分為兩種類型,一種是系統(tǒng)提供的氣泡PopupOptions,一種是開發(fā)者可以自定義的氣泡CustomPopupOptions。其中PopupOptions為系統(tǒng)提供的氣泡,通過配置primaryButton、secondaryButton來設(shè)置帶按鈕的氣泡。CustomPopupOptions通過配置builder參數(shù)來設(shè)置自定義的氣泡。

文本提示氣泡

文本提示氣泡常用于只展示帶有文本的信息提示,不帶有任何交互的場(chǎng)景。Popup屬性需綁定組件,當(dāng)bindPopup屬性中參數(shù)show為true的時(shí)候會(huì)彈出氣泡提示。

在Button組件上綁定Popup屬性,每次點(diǎn)擊Button按鈕,handlePopup會(huì)切換布爾值,當(dāng)其為true時(shí),觸發(fā)bindPopup彈出氣泡。

  1. @Entry
  2. @Component
  3. struct PopupExample {
  4. @State handlePopup: boolean = false
  5. build() {
  6. Column() {
  7. Button('PopupOptions')
  8. .onClick(() => {
  9. this.handlePopup = !this.handlePopup
  10. })
  11. .bindPopup(this.handlePopup, {
  12. message: 'This is a popup with PopupOptions',
  13. })
  14. }.width('100%').padding({ top: 5 })
  15. }
  16. }

添加氣泡狀態(tài)變化的事件

通過onStateChange參數(shù)為氣泡添加狀態(tài)變化的事件回調(diào),可以判斷當(dāng)前氣泡的顯示狀態(tài)。

  1. @Entry
  2. @Component
  3. struct PopupExample {
  4. @State handlePopup: boolean = false
  5. build() {
  6. Column() {
  7. Button('PopupOptions')
  8. .onClick(() => {
  9. this.handlePopup = !this.handlePopup
  10. })
  11. .bindPopup(this.handlePopup, {
  12. message: 'This is a popup with PopupOptions',
  13. onStateChange: (e)=> { // 返回當(dāng)前的氣泡狀態(tài)
  14. if (!e.isVisible) {
  15. this.handlePopup = false
  16. }
  17. }
  18. })
  19. }.width('100%').padding({ top: 5 })
  20. }
  21. }

帶按鈕的提示氣泡

通過primaryButton、secondaryButton屬性為氣泡最多設(shè)置兩個(gè)Button按鈕,通過此按鈕進(jìn)行簡(jiǎn)單的交互,開發(fā)者可以通過配置action參數(shù)來設(shè)置想要觸發(fā)的操作。

  1. @Entry
  2. @Component
  3. struct PopupExample22 {
  4. @State handlePopup: boolean = false
  5. build() {
  6. Column() {
  7. Button('PopupOptions').margin({ top: 200 })
  8. .onClick(() => {
  9. this.handlePopup = !this.handlePopup
  10. })
  11. .bindPopup(this.handlePopup, {
  12. message: 'This is a popup with PopupOptions',
  13. primaryButton: {
  14. value: 'Confirm',
  15. action: () => {
  16. this.handlePopup = !this.handlePopup
  17. console.info('confirm Button click')
  18. }
  19. },
  20. secondaryButton: {
  21. value: 'Cancel',
  22. action: () => {
  23. this.handlePopup = !this.handlePopup
  24. }
  25. },
  26. onStateChange: (e) => {
  27. if (!e.isVisible) {
  28. this.handlePopup = false
  29. }
  30. }
  31. })
  32. }.width('100%').padding({ top: 5 })
  33. }
  34. }

自定義氣泡

開發(fā)者可以使用構(gòu)建器CustomPopupOptions創(chuàng)建自定義氣泡,@Builder中可以放自定義的內(nèi)容。除此之外,還可以通過popupColor等參數(shù)控制氣泡樣式。

  1. @Entry
  2. @Component
  3. struct Index {
  4. @State customPopup: boolean = false
  5. // popup構(gòu)造器定義彈框內(nèi)容
  6. @Builder popupBuilder() {
  7. Row({ space: 2 }) {
  8. Image($r("app.media.icon")).width(24).height(24).margin({ left: 5 })
  9. Text('This is Custom Popup').fontSize(15)
  10. }.width(200).height(50).padding(5)
  11. }
  12. build() {
  13. Column() {
  14. Button('CustomPopupOptions')
  15. .position({x:100,y:200})
  16. .onClick(() => {
  17. this.customPopup = !this.customPopup
  18. })
  19. .bindPopup(this.customPopup, {
  20. builder: this.popupBuilder, // 氣泡的內(nèi)容
  21. placement:Placement.Bottom, // 氣泡的彈出位置
  22. popupColor:Color.Pink, // 氣泡的背景色
  23. onStateChange: (e) => {
  24. console.info(JSON.stringify(e.isVisible))
  25. if (!e.isVisible) {
  26. this.customPopup = false
  27. }
  28. }
  29. })
  30. }
  31. .height('100%')
  32. }
  33. }

使用者通過配置placement參數(shù)將彈出的氣泡放到需要提示的位置。彈窗構(gòu)造器會(huì)觸發(fā)彈出提示信息,來引導(dǎo)使用者完成操作,也讓使用者有更好的UI體驗(yàn)。

  1. @Entry
  2. @Component
  3. struct Index {
  4. @State customPopup: boolean = false
  5. // popup構(gòu)造器定義彈框內(nèi)容
  6. @Builder popupBuilder() {
  7. Row({ space: 2 }) {
  8. Image('/images/shengWhite.png').width(30).objectFit(ImageFit.Contain)
  9. Column(){
  10. Text('控制人生').fontSize(14).fontWeight(900).fontColor(Color.White).width('100%')
  11. Text('想要跟唱時(shí),數(shù)千萬歌曲任你選擇,人聲隨心調(diào)整。').fontSize(12).fontColor('#ffeeeeee').width('100%')
  12. }
  13. }.width(230).height(80).padding(5)
  14. }
  15. build() {
  16. Row() {
  17. Text('我要K歌')
  18. Image('/images/sheng.png').width(35).objectFit(ImageFit.Contain)
  19. .onClick(() => {
  20. this.customPopup = !this.customPopup
  21. })
  22. .bindPopup(this.customPopup, {
  23. builder: this.popupBuilder,
  24. })
  25. }
  26. .margin(20)
  27. .height('100%')
  28. }
  29. }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)