一、概述
警告彈窗(AlertDialog)用于向用戶顯示重要信息或獲取用戶的確認(rèn)反饋碴巾。它從 API Version 7 開始支持厦瓢,在元服務(wù)中從 API version 11 開始支持,其功能依賴 UI 的執(zhí)行上下文,不可在 UI 上下文不明確的地方使用(從 API version 10 開始欺抗,可通過 UIContext 中的 showAlertDialog 明確 UI 執(zhí)行上下文)强重。
二、使用步驟
(一)獲取 UIContext 實(shí)例(推薦)
為避免實(shí)例不明確的問題佃声,建議使用getUIContext
獲取 UIContext 實(shí)例圾亏,并使用showAlertDialog
調(diào)用綁定實(shí)例的AlertDialog.show()
。例如:
this.getUIContext().showAlertDialog(/*AlertDialog參數(shù)*/);
(二)定義彈窗參數(shù)
- 基本參數(shù)
-
title
(可選夭问,ResourceStr 類型):彈窗標(biāo)題曹铃。 -
subtitle
(可選陕见,從 API version 10 開始支持,ResourceStr 類型):彈窗副標(biāo)題灰粮。 -
message
(必填蜕着,ResourceStr 類型):彈窗內(nèi)容承匣。 -
autoCancel
(可選,boolean 類型嘉抒,默認(rèn)值為 true):點(diǎn)擊遮障層時(shí)是否關(guān)閉彈窗袍暴。 -
alignment
(可選,DialogAlignment 枚舉類型岗宣,默認(rèn)值為 DialogAlignment.Default):彈窗在豎直方向上的對(duì)齊方式耗式。 -
offset
(可選趁猴,默認(rèn)值為 {dx: 0, dy: 0}):彈窗相對(duì) alignment 所在位置的偏移量儡司。 -
gridCount
(可選,number 類型跷坝,默認(rèn)值為 4):彈窗容器寬度所占用柵格數(shù)。 -
maskRect
(可選笋婿,從 API version 10 開始支持顿颅,Rectangle 類型粱腻,默認(rèn)值為 {x: 0, y: 0, width: '100%', height: '100%'}):彈窗遮蔽層區(qū)域,在遮蔽層區(qū)域內(nèi)的事件不透傳捞慌,在遮蔽層區(qū)域外的事件透傳(showInSubWindow 為 true 時(shí)柬批,maskRect 不生效)氮帐。 -
showInSubWindow
(可選,從 API version 11 開始支持皮服,boolean 類型龄广,默認(rèn)值為 false):某彈框需要顯示在主窗口之外時(shí)蕴侧,是否在子窗口顯示此彈窗。 -
isModal
(可選奠衔,從 API version 11 開始支持,boolean 類型痊夭,默認(rèn)值為 true):彈窗是否為模態(tài)窗口她我,模態(tài)窗口有蒙層迫横,非模態(tài)窗口無蒙層矾踱。 -
backgroundColor
(可選疏哗,從 API version 12 開始支持返奉,ResourceColor 類型,默認(rèn)值為 Color.Transparent):彈窗背板顏色(設(shè)置了非透明色時(shí)雷逆,backgroundBlurStyle 需設(shè)為 BlurStyle.NONE)污尉。 -
backgroundBlurStyle
(可選被碗,從 API version 12 開始支持,BlurStyle 類型缩抡,默認(rèn)值為 BlurStyle.COMPONENT_ULTRA_THICK):彈窗背板模糊材質(zhì)(設(shè)置為 BlurStyle.NONE 可關(guān)閉背景虛化瞻想,設(shè)置了非 NONE 值時(shí)娩嚼,不要設(shè)置 backgroundColor)岳悟。 -
onWillDismiss
(可選,從 API version 12 開始支持贵少,Callback<DismissDialogAction>類型):交互式關(guān)閉回調(diào)函數(shù)呵俏,可根據(jù)回調(diào)中的 reason 選擇是否能關(guān)閉彈窗(當(dāng)前不支持 CLOSE_BUTTON 枚舉值,且在 onWillDismiss 回調(diào)中不能再做 onWillDismiss 攔截)滔灶。 -
cornerRadius
(可選普碎,從 API version 12 開始支持,可設(shè)置背板的圓角半徑录平,默認(rèn)值為 {topLeft: '32vp', topRight: '32vp', bottomLeft: '32vp', bottomRight: '32vp'}):圓角大小受組件尺寸限制麻车,最大值為組件寬或高的一半缀皱,若值為負(fù),則按默認(rèn)值處理动猬,也支持百分比參數(shù)方式啤斗。 -
transition
(可選赁咙,從 API version 12 開始支持钮莲,設(shè)置彈窗顯示和退出的過渡效果)。 -
width
(可選序目,從 API version 12 開始支持臂痕,設(shè)置彈窗背板的寬度,默認(rèn)最大值為 400vp猿涨,支持百分比參數(shù)方式)握童。 -
height
(可選,從 API version 12 開始支持叛赚,設(shè)置彈窗背板的高度澡绩,默認(rèn)最大值為 0.9 *(窗口高度 - 安全區(qū)域),支持百分比參數(shù)方式)俺附。 -
borderWidth
(可選肥卡,從 API version 12 開始支持,可分別設(shè)置 4 個(gè)邊框?qū)挾仁铝停J(rèn)值為 0步鉴,支持百分比參數(shù)方式)。 -
borderColor
(可選璃哟,從 API version 12 開始支持氛琢,設(shè)置彈窗背板的邊框顏色,默認(rèn)值為 Color.Black随闪,需和 borderWidth 一起使用)阳似。 -
borderStyle
(可選,從 API version 12 開始支持铐伴,設(shè)置彈窗背板的邊框樣式撮奏,默認(rèn)值為 BorderStyle.Solid,需和 borderWidth 一起使用)当宴。 -
shadow
(可選畜吊,從 API version 12 開始支持,設(shè)置彈窗背板的陰影)户矢。 -
textStyle
(可選玲献,從 API version 12 開始支持,設(shè)置彈窗 message 內(nèi)容的文本樣式)。
-
- 按鈕相關(guān)參數(shù)
- 可以使用
AlertDialogParamWithConfirm
青自、AlertDialogParamWithButtons
或AlertDialogParamWithOptions
(從 API version 10 開始支持)來定義按鈕相關(guān)參數(shù)。 -
confirm
(AlertDialogParamWithConfirm
中):包含確認(rèn) Button 的使能狀態(tài)(enabled
驱证,默認(rèn)值為 true)延窜、默認(rèn)焦點(diǎn)(defaultFocus
,默認(rèn)值為 false)抹锄、按鈕風(fēng)格(style
逆瑞,默認(rèn)值為 DialogButtonStyle.DEFAULT)、文本內(nèi)容(value
)伙单、文本色(fontColor
)获高、按鈕背景色(backgroundColor
)和點(diǎn)擊回調(diào)(action
)。 -
primaryButton
和secondaryButton
(AlertDialogParamWithButtons
中):與confirm
類似吻育,分別用于定義主要按鈕和次要按鈕的相關(guān)屬性念秧。 -
buttons
(AlertDialogParamWithOptions
中):是一個(gè)AlertDialogButtonOptions
數(shù)組,用于定義彈窗容器中的多個(gè)按鈕布疼,每個(gè)按鈕包含使能狀態(tài)(enabled
摊趾,默認(rèn)值為 true)、默認(rèn)焦點(diǎn)(defaultFocus
游两,默認(rèn)值為 false)砾层、風(fēng)格樣式(style
,默認(rèn)值為 DialogButtonStyle.DEFAULT)贱案、文本內(nèi)容(value
肛炮,若為 null 則按鈕不顯示)、文本顏色(fontColor
)宝踪、背景顏色(backgroundColor
)和點(diǎn)擊回調(diào)(action
)等屬性侨糟。同時(shí),還可以設(shè)置buttonDirection
(可選肴沫,DialogButtonDirection 枚舉類型粟害,默認(rèn)值為 DialogButtonDirection.AUTO,用于指定按鈕排布方向)颤芬。
- 可以使用
(三)顯示彈窗
使用AlertDialog.show
方法并傳入定義好的參數(shù)來顯示彈窗悲幅,例如:
AlertDialog.show({
title: 'title',
message: 'text',
autoCancel: true,
alignment: DialogAlignment.Bottom,
offset: { dx: 0, dy: -20 },
gridCount: 3,
confirm: {
value: 'button',
action: () => {
console.info('Button-clicking callback');
}
},
cancel: () => {
console.info('Closed callbacks');
},
onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
console.info("reason=" + JSON.stringify(dismissDialogAction.reason));
console.log("dialog onWillDismiss");
if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
dismissDialogAction.dismiss();
}
if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
dismissDialogAction.dismiss();
}
}
});
三、注意事項(xiàng)
- 盡量按照推薦方式獲取 UIContext 實(shí)例并顯示彈窗站蝠,以確保功能正常汰具。
- 在設(shè)置按鈕相關(guān)參數(shù)時(shí),注意各屬性的默認(rèn)值和優(yōu)先級(jí)菱魔,以及按鈕響應(yīng)的相關(guān)規(guī)則(如默認(rèn)響應(yīng) Enter 鍵能力在 defaultFocus 為 true 時(shí)不生效等)留荔。
- 當(dāng)設(shè)置背景相關(guān)屬性(如 backgroundColor 和 backgroundBlurStyle)時(shí),需遵循其相互制約的規(guī)則。
- 對(duì)于彈窗的各種尺寸和位置相關(guān)參數(shù)(如 width聚蝶、height杰妓、alignment、offset 等)碘勉,根據(jù)實(shí)際需求合理設(shè)置巷挥,以達(dá)到理想的彈窗顯示效果。