Popup彈窗控制

2024-01-22 16:18 更新

給組件綁定popup彈窗,并設(shè)置彈窗內(nèi)容,交互邏輯和顯示狀態(tài)。

說明
  • 從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。
  • popup彈窗的顯示狀態(tài)在onStateChange事件回調(diào)中反饋,其顯隱與組件的創(chuàng)建或銷毀無強(qiáng)對應(yīng)關(guān)系。

接口

名稱

參數(shù)類型

描述

bindPopup

show: boolean,

popup: PopupOptions | CustomPopupOptions8+

給組件綁定Popup彈窗,設(shè)置參數(shù)show為true彈出彈框。

show: 彈窗顯示狀態(tài),默認(rèn)值為false,隱藏彈窗。popup彈窗必須等待頁面全部構(gòu)建完成才能展示,因此show不能在頁面構(gòu)建中設(shè)置為true,否則會導(dǎo)致popup彈窗顯示位置及形狀錯誤。

popup: 配置當(dāng)前彈窗提示的參數(shù)。

PopupOptions類型說明

名稱

類型

必填

描述

message

string

彈窗信息內(nèi)容。

placementOnTop

boolean

是否在組件上方顯示,默認(rèn)值為false。

primaryButton

{

value: string,

action: () => void

}

第一個按鈕。

value: 彈窗里主按鈕的文本。

action: 點(diǎn)擊主按鈕的回調(diào)函數(shù)。

secondaryButton

{

value: string,

action: () => void

}

第二個按鈕。

value: 彈窗里輔助按鈕的文本。

action: 點(diǎn)擊輔助按鈕的回調(diào)函數(shù)。

onStateChange

(event: { isVisible: boolean }) => void

彈窗狀態(tài)變化事件回調(diào),參數(shù)isVisible為彈窗當(dāng)前的顯示狀態(tài)。

arrowOffset9+

Length

popup箭頭在彈窗處的偏移。箭頭在氣泡上下方時,數(shù)值為0表示箭頭居最左側(cè),偏移量為箭頭至最左側(cè)的距離,默認(rèn)居中。箭頭在氣泡左右側(cè)時,偏移量為箭頭至最上側(cè)的距離,默認(rèn)居中。如果顯示在屏幕邊緣,氣泡會自動左右偏移,數(shù)值為0時箭頭始終指向綁定組件。

showInSubWindow9+

boolean

是否在子窗口顯示氣泡,默認(rèn)值為false。

CustomPopupOptions8+類型說明

名稱

類型

必填

描述

builder

CustomBuilder

提示氣泡內(nèi)容的構(gòu)造器。

說明:

popup為通用屬性,自定義popup中不支持再次彈出popup。對builder下的第一層容器組件不支持使用position屬性,如果使用將導(dǎo)致氣泡不顯示。

builder中若使用自定義組件,自定義組件的aboutToAppear和aboutToDisappear生命周期與popup彈窗的顯隱無關(guān),不能使用其生命周期判斷popup彈窗的顯隱。

placement

Placement

氣泡組件優(yōu)先顯示的位置,當(dāng)前位置顯示不下時,會自動調(diào)整位置。

默認(rèn)值:Placement.Bottom

popupColor

ResourceColor

提示氣泡的顏色。

enableArrow

boolean

是否顯示箭頭。

從API Version 9開始,如果箭頭所在方位側(cè)的氣泡長度不足以顯示下箭頭,則會默認(rèn)不顯示箭頭。比如:placement設(shè)置為Left,此時如果氣泡高度小于箭頭的寬度(32vp)與氣泡圓角兩倍(48vp)之和(80vp),則實(shí)際不會顯示箭頭。

默認(rèn)值:true

autoCancel

boolean

頁面有操作時,是否自動關(guān)閉氣泡。

默認(rèn)值:true

onStateChange

(event: { isVisible: boolean }) => void

彈窗狀態(tài)變化事件回調(diào),參數(shù)為彈窗當(dāng)前的顯示狀態(tài)。

arrowOffset9+

Length

popup箭頭在彈窗處的偏移。箭頭在氣泡上下方時,數(shù)值為0表示箭頭居最左側(cè),偏移量為箭頭至最左側(cè)的距離,默認(rèn)居中。箭頭在氣泡左右側(cè)時,偏移量為箭頭至最上側(cè)的距離,默認(rèn)居中。如果顯示在屏幕邊緣,氣泡會自動左右偏移,數(shù)值為0時箭頭始終指向綁定組件。

showInSubWindow9+

boolean

是否在子窗口顯示氣泡,默認(rèn)值為false。

示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct PopupExample {
  5. @State handlePopup: boolean = false
  6. @State customPopup: boolean = false
  7. // popup構(gòu)造器定義彈框內(nèi)容
  8. @Builder popupBuilder() {
  9. Row({ space: 2 }) {
  10. Image($r("app.media.image")).width(24).height(24).margin({ left: -5 })
  11. Text('Custom Popup').fontSize(10)
  12. }.width(100).height(50).padding(5)
  13. }
  14. build() {
  15. Flex({ direction: FlexDirection.Column }) {
  16. // PopupOptions 類型設(shè)置彈框內(nèi)容
  17. Button('PopupOptions')
  18. .onClick(() => {
  19. this.handlePopup = !this.handlePopup
  20. })
  21. .bindPopup(this.handlePopup, {
  22. message: 'This is a popup with PopupOptions',
  23. placementOnTop: true,
  24. showInSubWindow:false,
  25. primaryButton: {
  26. value: 'confirm',
  27. action: () => {
  28. this.handlePopup = !this.handlePopup
  29. console.info('confirm Button click')
  30. }
  31. },
  32. // 第二個按鈕
  33. secondaryButton: {
  34. value: 'cancel',
  35. action: () => {
  36. this.handlePopup = !this.handlePopup
  37. console.info('cancel Button click')
  38. }
  39. },
  40. onStateChange: (e) => {
  41. console.info(JSON.stringify(e.isVisible))
  42. if (!e.isVisible) {
  43. this.handlePopup = false
  44. }
  45. }
  46. })
  47. .position({ x: 100, y: 50 })
  48. // CustomPopupOptions 類型設(shè)置彈框內(nèi)容
  49. Button('CustomPopupOptions')
  50. .onClick(() => {
  51. this.customPopup = !this.customPopup
  52. })
  53. .bindPopup(this.customPopup, {
  54. builder: this.popupBuilder,
  55. placement: Placement.Top,
  56. maskColor: '0x33000000',
  57. popupColor: Color.Yellow,
  58. enableArrow: true,
  59. showInSubWindow: false,
  60. onStateChange: (e) => {
  61. if (!e.isVisible) {
  62. this.customPopup = false
  63. }
  64. }
  65. })
  66. .position({ x: 80, y: 200 })
  67. }.width('100%').padding({ top: 5 })
  68. }
  69. }

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號