/**
* 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()
}
)
}
}
}
}
Composable弹窗
于 2023-07-07 09:33:37 首次发布