Compose | UI组件(八) | Dialog - 对话框


前言

在我们传统的UI界面中,经常用到弹框,Compose也有弹框,但是Compose的弹框显示和隐藏和传统的弹框显示(show)和隐藏 (dismiss)不一样,Compose中显示与否要看是否重组被执行,所以它显示与否要依赖状态控制


Dialog 普通弹框

Dialog是最底层的弹框,可以在该组件之上封装

@Composable
fun Dialog(
    onDismissRequest: () -> Unit,   //关闭回调函数
    properties: DialogProperties = DialogProperties(), //对话框的属性,用于自定义对话框
    content: @Composable () -> Unit    //对话框内容
)

Dialog 普通弹框的使用

@Composable
fun DialogMethod(){
    val openDialog = remember { mutableStateOf(false) }

    BaseDialog(dialogState = openDialog)

    Button(modifier = Modifier.wrapContentSize(),
           onClick  = { openDialog.value = !openDialog.value}) {
             Text(text = "显示普通dialog")
    }
}

@Composable
fun BaseDialog(dialogState:MutableState<Boolean>){
      if(dialogState.value){
          Dialog(onDismissRequest = { dialogState.value = false }) {
              Box(modifier = Modifier
                  .size(200.dp, 50.dp)
                  .background(Color.Red))
          }
      }
}

AlertDialog 警告弹框

AlertDialog组件是Dialog组件更高级的封装组件,它定位好了标题,内容文本,按钮位置

@Composable
fun AlertDialog(
    onDismissRequest: () -> Unit,                           //关闭回调函数
    confirmButton: @Composable () -> Unit,                  //确认按钮
    modifier: Modifier = Modifier,                          //修饰符
    dismissButton: @Composable (() -> Unit)? = null,        //取消按钮
    icon: @Composable (() -> Unit)? = null,                 //图标
    title: @Composable (() -> Unit)? = null,                //标题
    text: @Composable (() -> Unit)? = null,                 //内容
    shape: Shape = AlertDialogDefaults.shape,               //样式
    containerColor: Color = AlertDialogDefaults.containerColor,       //内容颜色
    iconContentColor: Color = AlertDialogDefaults.iconContentColor,   //图标颜色
    titleContentColor: Color = AlertDialogDefaults.titleContentColor, //标题颜色
    textContentColor: Color = AlertDialogDefaults.textContentColor,   //字体颜色
    tonalElevation: Dp = AlertDialogDefaults.TonalElevation,          //设置阴影
    properties: DialogProperties = DialogProperties()                 //对话框的属性,用于自定义对话框
) 

AlertDialog 警告弹框的使用

@Composable
fun DialogMethod(){
    val openAlertDialog = remember { mutableStateOf(false) }
   
    AlertDialogSample(dialogState = openAlertDialog)

    Button(modifier = Modifier.wrapContentSize(),
           onClick  = { openAlertDialog.value = !openAlertDialog.value}) {
           Text(text = "显示Alertdialog")
    }
}

@Composable
fun AlertDialogSample(dialogState:MutableState<Boolean>){
     if(dialogState.value){
         AlertDialog(onDismissRequest = { dialogState.value = false },
                     title = {
                          Text(text = "提示标题")
                     },
                     text = {
                          Text(text = "提示内容")
                     },
                     confirmButton = {
                          TextButton(onClick = { dialogState.value = false }) {
                              Text(text = "确定")
                          }
                     },
                     dismissButton = {
                          TextButton(onClick = { dialogState.value = false }) {
                              Text(text = "取消")
                          }
                     }
         )

     }
}

总结

  1. Dialog是最底层的弹框,可以在该组件之上封装

  2. AlertDialog组件是Dialog组件更高级的封装组件,它定位好了标题,内容文本,按钮位置

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭祖爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值