Composable弹窗


/**
 * author: yetld
 * date: 2023/7/6
 * 确认/取消 弹窗
 */
class ConfirmDialog(
    context: Context,
    private val title: String,
    private val content: String,
    private val confirm: String,
    private val cancel: String,
    private val callback: (Boolean) -> Unit
) : Dialog(context) {
    companion object {
        private var preDialog: ConfirmDialog? = null

        fun showDialog(
            context: Context?,
            title: String,
            content: String,
            confirm: String,
            cancel: String,
            callback: (Boolean) -> Unit
        ): Dialog? {
            synchronized(ConfirmDialog::class.java) {
                var temDialog = preDialog
                if (context != null && temDialog?.isShowing != true) {
                    temDialog = ConfirmDialog(
                        context = context,
                        title = title,
                        content = content,
                        confirm = confirm,
                        cancel = cancel,
                        callback = callback
                    )
                    temDialog.show()
                    preDialog = temDialog
                }
            }
            return preDialog
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        window!!.requestFeature(Window.FEATURE_NO_TITLE)
        window!!.setBackgroundDrawableResource(android.R.color.transparent)
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        setCanceledOnTouchOutside(true)
        setCancelable(true)

        super.onCreate(savedInstanceState)

        setContentView(ComposeView(context = context).apply {
            addToLifecycle()
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                DialogContent(
                    title,
                    content,
                    confirm,
                    cancel,
                    callback
                )
            }
        })
    }

    /**
     * 确认/取消弹窗
     * @param title 标题
     * @param content 内容
     * @param confirm 确认按钮显示的文字
     * @param cancel 取消按钮显示的文字
     * @param callback true:点击确认, false:点击取消
     */
    @Composable
    private fun DialogContent(
        title: String,
        content: String,
        confirm: String = "确认",
        cancel: String = "取消",
        callback: (Boolean) -> Unit,
    ) {
        Column(
            modifier = Modifier
                .width(268.dp)
                .background(Color.White, RoundedCornerShape(12.dp))
                .clip(RoundedCornerShape(12.dp)),
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text(
                text = title,
                color = Color.Black,
                fontSize = 16.sp,
                fontWeight = FontWeight.Bold,
                modifier = Modifier.padding(top = 20.dp)
            )
            Spacer(modifier = Modifier.height(8.dp))
            Text(
                text = content,
                color = Color(0XFF23262B),
                textAlign = TextAlign.Center,
                fontSize = 14.sp,
                modifier = Modifier
                    .padding(top = 8.dp)
                    .padding(horizontal = 20.dp)
            )
            Divider(
                modifier = Modifier
                    .padding(top = 20.dp)
                    .fillMaxWidth(),
                color = Color(0XFFE1E3E6),
                thickness = 0.5.dp
            )
            Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .height(44.dp),
                verticalAlignment = Alignment.CenterVertically
            ) {
                Text(
                    text = cancel,
                    fontSize = 15.sp,
                    color = Color.Gray,
                    textAlign = TextAlign.Center,
                    modifier = Modifier
                        .weight(0.5f, true)
                        .clickable {
                            callback.invoke(false)
                            dismiss()
                        }
                )
                Text(
                    text = confirm,
                    fontSize = 15.sp,
                    color = Color(0XFF46A6FA),
                    textAlign = TextAlign.Center,
                    modifier = Modifier
                        .weight(0.5f, true)
                        .clickable {
                            callback.invoke(true)
                            dismiss()
                        }
                )
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值