Android Jetpack Compose - 深入了解 AlertDialog

news/2025/1/11 10:51:06/

在开发 Android 应用时,对话框是一个常见的 UI 元素,用于向用户显示信息或获取用户的反馈。在 Jetpack Compose 中,我们可以使用 AlertDialog 组件来创建对话框。在这篇博客中,我们将深入了解如何使用 Jetpack Compose 的 AlertDialog 组件。


一、什么是 Jetpack Compose?

Jetpack Compose 是一个现代的、功能齐全的 Android UI 工具包,它使用 Kotlin 编程语言的强大功能,简化了 UI 设计和实现的过程。

二、开始使用 AlertDialog

首先,在你的 Compose 函数中,你需要一个状态变量来控制 AlertDialog 的显示。

val showDialog by remember { mutableStateOf(true) }

 然后,你可以使用 AlertDialog 组件,并使用参数来定制它的外观和行为。

@Preview
@Composable
fun alertDialog(){var showDialog by remember {mutableStateOf(true)}Button(onClick = {  showDialog=true}) {Text(text = "显示弹框")}if(showDialog){AlertDialog(onDismissRequest = { /*TODO*/ },title = { Text(text = "AlertDialog 标题")},text = {Text(text = "这是对话框的内容")},confirmButton = {Button(onClick = { showDialog=false }) {Text(text = "确认")}},dismissButton = {Button(onClick = { showDialog=false }) {Text(text = "取消")}})}
}

 三、定制 AlertDialog

1.改变背景颜色

你可以通过设置 backgroundColor 参数来改变对话框的背景颜色。

AlertDialog(
    // ...
    backgroundColor = Color.Red
)
 

2.添加自定义视图

如果你需要在对话框中添加自定义视图,你可以使用 buttons 参数。

AlertDialog(
    // ...
    buttons = {
        Column {
            // 在这里添加你的自定义视图
        }
    }
)

3.高级用法 - 创建一个可复用的 AlertDialog 组件

在大型项目中,你可能希望创建一个可复用的 AlertDialog 组件,以保持代码的整洁和一致性。

@Composable
fun CustomAlertDialog(title:String,message:String,onConfirm:() -> Unit,onDismiss:() -> Unit
){AlertDialog(onDismissRequest = onDismiss,title = {Text(text = title)},text = { Text(text = message)},confirmButton = {Button(onClick =  onConfirm) {Text(text = "确认")}},dismissButton = {Button(onClick = onDismiss) {Text(text = "取消")}})
}

四、完整Demo

@Preview
@Composable
fun alertDialog(){Column(){var showDialog by remember {mutableStateOf(true)}Button(onClick = {  showDialog=true}) {Text(text = "显示弹框")}if(showDialog){AlertDialog(onDismissRequest = { /*TODO*/ },title = {Text(text = "AlertDialog 标题")},text = {Text(text = "这是对话框的内容")},confirmButton = {Button(onClick = { showDialog=false }) {Text(text = "确认")}},dismissButton = {Button(onClick = { showDialog=false }) {Text(text = "取消")}},backgroundColor = Color.Red)}Spacer(modifier = Modifier.height(50.dp))var showDialog1 by remember {mutableStateOf(false)}Button(onClick = { showDialog1=true }) {Text(text = "弹框1")}if(showDialog1){CustomAlertDialog(title ="提醒" , message = "点击错误", onConfirm = { showDialog1=false}, onDismiss = {showDialog1=false})}}}@Composable
fun CustomAlertDialog(title:String,message:String,onConfirm:() -> Unit,onDismiss:() -> Unit
){AlertDialog(onDismissRequest = onDismiss,title = {Text(text = title)},text = { Text(text = message)},confirmButton = {Button(onClick =  onConfirm) {Text(text = "确认")}},dismissButton = {Button(onClick = onDismiss) {Text(text = "取消")}})
}

然后,你可以在你的项目中反复使用这个自定义的 AlertDialog 组件。

结论

AlertDialog 是 Jetpack Compose 中一个非常有用的组件,允许开发者以声明式的方式创建对话框。通过灵活使用其属性和参数,我们可以创建出丰富多样的对话框来满足各种需求。

在你的下一个 Android 项目中,尝试使用 Jetpack Compose 的 AlertDialog 组件,你会发现它比传统的 Android 对话框更加简单、灵活。


http://www.ppmy.cn/news/611805.html

相关文章

寒假作业pta3

某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X)。捕鼠夹可重复…

微信小程序点击图片切换图片

实现的效果图 实现的方式有2中 先说下思路 1 使用wx:if 写2个图片 点击的显示一张即可, 2 使用数据传递当拿到图片的时候更换图片即可. 看下代码 2中方式:xml <view class"intro"> <image catchtapopen_tap wx:if"{{isShow}}" src"/im…

h265webplayer

h265webplayer https://github.com/ksvc/h265webplayer h265webplayer是金山云的Web端H.265视频播放器&#xff0c;该播放器Web SDK让您可以在支持WebAssembly的浏览器上播放MP4格式的点播视频&#xff0c;FLV http-flv协议的直播视频。 支持的功能 1、mp4格式的点播&#…

java后台的微信小程序支付的解决方案

java的后台主要就写两个controller 一个是 ----------------(1)调用支付统一下单API 生成 prepay_id 二个是 ----------------(2)微信支付完成的回调controller 第一个controller需要传入的参数有如下&#xff0c;如图&#xff1a; 然后&#xff0c;发送到微信端&#xff0c;把…

微信小程序bindtap 与 catchtap 是使用

如果写小程序对二者不理解的,那看到这边博客,将很快帮助到您, 个人总结的一句话:,bindtap点击事件在同一个view中会向上冒泡,而catchtap 不会向上冒泡 下面会有一个demo给出解释, 说他们使用的时候先说下微信小程序的事件分类冒泡事件与非冒泡事件 官网上这样规定的 事件分…

OpenGL 抗锯齿

1.简介 你可以看到&#xff0c;我们只是绘制了一个简单的立方体&#xff0c;你就能注意到它存在锯齿边缘。 可能不是非常明显&#xff0c;但如果你离近仔细观察立方体的边缘&#xff0c;你就应该能够看到锯齿状的图案。如果放大的话&#xff0c;你会看到下面的图案&#xff1a…

KNN算法简介

1&#xff0c;基本概念 邻近算法&#xff0c;或者说K最近邻(kNN&#xff0c;k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻&#xff0c;就是k个最近的邻居的意思&#xff0c;说的是每个样本都可以用它最接近的k个邻居来代表。KNN 算法本身简单…

微信小程序scroll-view的使用

这边博客主要是对微信小程序文档的的使用心得 官网地址 demo效果 一些属性 scroll-top 和属性,设置竖向滚动条的位置,就是第一次进来的时候,还没有滑动的时候view的位置 假如不设置默认在第一位置,如果想显示中间的或者其他的位置,就可以使用此属性 scroll-into-view 这个就…