From f25108360bed6f58c2af48e61bebc330d02c5cec Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 22 Apr 2026 11:39:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20CommonDialog=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9E=82=E7=9B=B43=E6=8C=89=E9=92=AE=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=88iOS=E9=A3=8E=E6=A0=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shuwei/dish/match/dialog/CommonDialog.kt | 46 +++++++++++++++-- app/src/main/res/layout/dialog_common.xml | 49 +++++++++++++++++++ 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/dialog/CommonDialog.kt b/app/src/main/java/com/shuwei/dish/match/dialog/CommonDialog.kt index 365115f..25d42f9 100644 --- a/app/src/main/java/com/shuwei/dish/match/dialog/CommonDialog.kt +++ b/app/src/main/java/com/shuwei/dish/match/dialog/CommonDialog.kt @@ -26,8 +26,10 @@ open class CommonDialog( private var contentText: String? = null private var negativeText = "取消" private var positiveText = "确认" + private var neutralText: String? = null private var negativeClick: (() -> Unit)? = null private var positiveClick: (() -> Unit)? = null + private var neutralClick: (() -> Unit)? = null private var dismissCallback: (() -> Unit)? = null /** 设置标题,为空时隐藏 */ @@ -36,18 +38,24 @@ open class CommonDialog( /** 设置内容,为空时隐藏 */ fun setContent(text: String): CommonDialog = apply { contentText = text } - /** 设置左侧取消按钮文字及点击回调 */ + /** 设置左侧取消按钮文字及点击回调(3按钮模式下对应顶部按钮) */ fun setNegativeButton(text: String, onClick: (() -> Unit)? = null): CommonDialog = apply { negativeText = text negativeClick = onClick } - /** 设置右侧确认按钮文字及点击回调 */ + /** 设置右侧确认按钮文字及点击回调(3按钮模式下对应底部按钮) */ fun setPositiveButton(text: String, onClick: (() -> Unit)? = null): CommonDialog = apply { positiveText = text positiveClick = onClick } + /** 设置中间第三个按钮文字及点击回调,调用后自动切换为垂直3按钮布局 */ + fun setNeutralButton(text: String, onClick: (() -> Unit)? = null): CommonDialog = apply { + neutralText = text + neutralClick = onClick + } + /** 设置弹窗消失回调 */ fun setOnDismissCallback(callback: () -> Unit): CommonDialog = apply { dismissCallback = callback @@ -70,6 +78,8 @@ open class CommonDialog( val verticalMargin = if (GlobalData.deviceRole == DeviceRole.MASTER) 35.dp else 20.dp binding.tvTitle.updateLayoutParams { topMargin = verticalMargin } binding.tvContent.updateLayoutParams { bottomMargin = verticalMargin } + + // 2按钮点击事件 binding.btnLeft.setOnClickListener { negativeClick?.invoke() dismiss() @@ -78,6 +88,21 @@ open class CommonDialog( positiveClick?.invoke() dismiss() } + + // 3按钮点击事件(negativeClick/positiveClick 与2按钮模式共用) + binding.btnTop.setOnClickListener { + negativeClick?.invoke() + dismiss() + } + binding.btnMiddle.setOnClickListener { + neutralClick?.invoke() + dismiss() + } + binding.btnBottom.setOnClickListener { + positiveClick?.invoke() + dismiss() + } + setOnDismissListener { dismissCallback?.invoke() } } @@ -87,8 +112,21 @@ open class CommonDialog( binding.tvContent.text = contentText binding.tvTitle.visibility = if (titleText.isNullOrEmpty()) View.GONE else View.VISIBLE binding.tvContent.visibility = if (contentText.isNullOrEmpty()) View.GONE else View.VISIBLE - binding.btnLeft.text = negativeText - binding.btnRight.text = positiveText + + val hasThreeButtons = !neutralText.isNullOrEmpty() + binding.layoutButtonsHorizontal.visibility = if (hasThreeButtons) View.GONE else View.VISIBLE + binding.layoutButtonsVertical.visibility = if (hasThreeButtons) View.VISIBLE else View.GONE + + if (hasThreeButtons) { + // 3按钮模式:顶部=取消,中间=中立,底部=确认 + binding.btnTop.text = negativeText + binding.btnMiddle.text = neutralText + binding.btnBottom.text = positiveText + } else { + // 2按钮模式 + binding.btnLeft.text = negativeText + binding.btnRight.text = positiveText + } } } diff --git a/app/src/main/res/layout/dialog_common.xml b/app/src/main/res/layout/dialog_common.xml index 0653a94..266be35 100644 --- a/app/src/main/res/layout/dialog_common.xml +++ b/app/src/main/res/layout/dialog_common.xml @@ -36,7 +36,9 @@ android:layout_height="1dp" android:background="@color/gray_eb" /> + + + + + + + + + + + + + + +