Android 软件开发:使用 Jetpack Compose 和 M3 的轮播图和列表应用程序 - 第 1 部分

发布于:2024-10-24 编辑:匿名 来源:网络

已经过去半年了。作为一名聋人独立开发者,我时常反思:过去六个月我进步了多少?在这篇文章中,我分享了一个使用Jetpack Compose、Material3和Kotlin语言的实现,使用Jetpack Compose、M3和Kotlin开发轮播图和列表功能。

无论您是否有开发经验,相信这篇文章都会对您有很大帮助。 1、项目背景 本应用中常见的UI需求是轮播、列表、弹窗。

使用 Jetpack Compose 和 M3 组件,可以快速高效地编码现代 UI。 2. 项目开发 2.1 介绍 Carousel UI 但很遗憾的告诉大家,目前 Jetpack Compose 本身并没有现成的 Carousel 控件(只能用 Android 原生实现 - 我会在下一篇文章中讲到 2.2 Carousel)它在首页HomeScreen中使用LazyRow实现水平滚动轮播,并展示了如何使用M3组件创建卡片式分类项并自定义颜色、样式和阴影效果。

代码语言: java copy @OptIn( ExperimentalFoundationApi::class)@Composablefun HomeScreen() { valcategories = listOf("Nim", "Nim", "Nim", "Nim", "Nim", "Nim") val grouped = listOf("Nim 大标题", "Nim 中标题", "Nim 标题").groupBy { it[3] } LazyColumn { grouped.forEach { StickyHeader { Text( text = it.value[0], style = MaterialTheme .typography.headlineMedium,颜色 = MaterialTheme.colorScheme.primary,修饰符 = Modifier.padding(16.dp) ) LazyRow { items(categories) { cat -> BrowserItem(cat = cat, drawable = R.drawable.ic_launcher_foreground) } } } } }}2.2.1 代码解释 ? LazyRow:这是水平滚动的核心组件,通过它实现左右滑动的效果。它与传统的RecyclerView类似,但使用起来简单得多。

? StickyHeader:它允许大家使用Card:来包装类别项,提供带有阴影和边框的卡片样式。 ? 图标和文本:使用这些组件以简单直观的方式显示图标和文本。

轻松实现分组列表的标题部分,就像音乐应用程序中的不同类别一样。代码语言:java 复制@OptIn(ExperimentalMaterial3Api::class)@Composablefun BrowserItem(cat: String, drawable: Int) { Card( modifier = Modifier .padding(16.dp) .size(.dp), border = BorderStroke(2) .dp,颜色= MaterialTheme.colorScheme.onSurfaceVariant),颜色= CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface,contentColor = MaterialTheme.colorScheme.onSurface),形状= MaterialTheme.shapes.medium,海拔= CardDefaults.cardElevation(8 .dp) ) { Column(verticalArrangement = Arrangement.Center,horizo??ntalAlignment = Alignment.CenterHorizo??ntally,modifier = Modifier.fillMaxSize()) { Text(text = cat, style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurface )间隔物(修饰符 = 修饰符.height(8.dp)) Icon( Painter = PainterResource(id = Drawable), contentDescription = cat, Modifier = Modifier.size(64.dp), Tint = MaterialTheme.colorScheme.primary ) } }}2.2.2 测试 UI代码语言: javascript copy@Preview(showBackground = true, widthDp =, heightDp = )@Composablefun PreviewHomeScreen() { HomeScreen()}@Preview(showBackground = true)@Composablefun PreviewBrowserItem() { BrowserItem(cat = "Nim", drawable = R.drawable.ic_launcher_foreground)}2.3 轮播图实现-2展示了SubscriptionScreen页面上简单轮播图的实现代码语言:java复制@Composablefun SubscriptionScreen() { Column( modifier = Modifier .fillMaxSize() .padding(16.dp),horizo??ntalAlignment = Alignment.CenterHorizo??ntally ) { Text( text = "Nim订阅页面", style = MaterialTheme.typography .headlineMedium, color = MaterialTheme.colorScheme.primary ) Spacer(modifier = Modifier.height(16.dp)) // 轮播图的实现 CarouselView( imageList = listOf( R.drawable.a, R.drawable.a, R .drawable.a, R.drawable.a, R.drawable.a ) ) }}@Composablefun CarouselView(imageList: List) { LazyRow( 修饰符 = Modifier .fillMaxWidth() .height(.dp), Horizo??ntalArrangement = Arrangement.spacedBy(16.dp) ) { items(imageList) { imageResId -> CarouselItem(imageResI)d = imageResId) } }}@Composablefun CarouselItem(imageResId: Int) { Image(画家 = PainterResource(id = imageResId), contentDescription = null, 修饰符 = Modifier .size(.dp) .padding(8.dp) )}2.3 .1 测试UI代码语言:java copy @Preview(showBackground = true, widthDp = )@Composablefun PreviewSubscriptionScreen() { SubscriptionScreen()} 2.4 在MyScreen页面上实现列表和弹窗,展示如何实现包含点击事件的列表。

当用户点击某个项目时弹出一个对话框(AlertDialog)代码语言: java copy @Composablefun MyScreen() { var showDialog by Remember { mutableStateOf(false) } var selectedItem by Remember { mutableStateOf("") } LazyColumn( modifier = Modifier .fillMaxSize() .padding(16.dp), VerticalArrangement = Arrangement.spacedBy(8.dp) ) { items(libraries) { lib -> LibItem(lib = lib, onClick = { selectedItem = lib.name showDialog = true }) } } if (showDialog) { AlertDialog( onDismissRequest = { showDialog = false }, contactButton = { TextButton(onClick = { showDialog = false }) { Text("确定") } }, title = { Text(text = "未开发") }, text = { Text(text = "您select: $selectedItem") } ) }}2.4.1 代码说明 ? LazyColumn:显示垂直列表 ? AlertDialog:使用showDialog 的布尔值来控制其显示和关闭。当用户单击列表项时,会触发弹出窗口。

代码语言:java copy @Composablefun LibItem(lib: Lib, onClick: () -> Unit) { Column { Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 16.dp) .clickable { onClick() }, Horizo??ntalArrangement = Arrangement.SpaceBetween ) { Text(text = lib.name) Icon(imageVector = Icons.Default.KeyboardArrowRight, contentDescription = "向右箭头") } 分隔线(color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.2f) ) }}2.4.2 代码解释 ? clickable:用于处理用户点击事件。当用户点击某个item时,通过onClick触发相应的逻辑。

? 行:水平排列文字和图标,两端留出一定的空间,视觉上整齐。 2.4.3 测试UI代码语言:java copy @Preview(showBackground = true)@Composablefun PreviewMyScreen() { MyScreen()} 2.5 视频演示视频内容总结三 通过本Demo,使用Jetpack Compose和M3实现了常见的轮播图、列表和弹出窗口功能演示了如何高效构建现代UI界面。

希望这篇文章能够帮助大家更好地理解Compose的强大之处。未完待续,下一篇文章将介绍如何使用原生AndroidView实现类似的功能,敬请期待。

有问题请追问,感谢阅读)4.新增:/10/15-更新文章 最近看到一则更新轮播组件的新闻,说JetpackComposeM3支持最新版本的material3 1.3.04.1项目配置代码语言:javascript copy实现("androidx.compose.material3:material3:1.3.0")4.2 核心代码代码语言:java copy @OptIn(ExperimentalMaterial3Api::class)@Preview@Composableprivate fun CarouselExamples() { data class CarouselItem ( val id: Int, @DrawableRes val imageResId: Int, val contentDescription: String ) val items = Remember { listOf( CarouselItem(0, R.drawable.nim, ""), CarouselItem(1, R.drawable.nim, " "), CarouselItem (2, R.drawable.nim, ""), CarouselItem(3, R.drawable.nim,""), CarouselItem(4, R.drawable.nim, ""), ) } Horizo??ntalUncontainedCarousel( state = RememberCarouselState { items .count() }, 修饰符 = Modifier.fillMaxWidth() .wrapContentHeight() .padding(top =40.dp,底部 = 16.dp),itemWidth = .dp,itemSpacing = 8.dp,contentPadding = PaddingValues(start = 16.dp) ) { i -> val item = items[i] Image( modifier = Modifier. height(.dp) .maskClip(MaterialTheme.shapes.extraLarge), Painter = PainterResource(id = item.imageResId), contentDescription = item.contentDescription, contentScale = ContentScale.Crop ) }}4.3 视频演示视频内容 4.4 轮播图片添加边框代码实现了向轮播添加边框。您可以使用以下方法通过 maskBorder 修饰符为 maskClip 提供不同的形状: 代码语言:java copy modifier = Modifier.height(.dp) .maskClip(MaterialTheme.shapes.extraLarge)。

Android 软件开发:使用 Jetpack Compose 和 M3 的轮播图和列表应用程序 - 第 1 部分

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 《合肥市加快推进集成电路产业发展若干政策》正式发布

    《合肥市加快推进集成电路产业发展若干政策》正式发布

    合肥日报 近日,《合肥市加快推进集成电路产业发展若干政策》(以下简称《政策》)正式发布。 《政策》在支持企业研发创新、支持企业规模发展、支持产业生态打造等方面提出13条具体措施,进一步加快我市集成电路产业发展,打造国家集成电路战略性新兴产业集群具有重要影响。

    06-06

  • 屋顶光伏或成“救命稻草”!英国光伏协会呼吁降低光伏、储能等技术增值税

    屋顶光伏或成“救命稻草”!英国光伏协会呼吁降低光伏、储能等技术增值税

    英国光伏协会(SolarEnergyUK)近日建议英国政府降低光伏系统和储能等技术的增值税其他技术。 这是为了减少能源价格的上涨,对消费者来说是不利的。 一种快速而简单的影响方式。 作为春季声明的一部分,该协会致信总理里希苏纳克(Rishi Sunak),呼吁将国内可再生能源和能源

    06-08

  • ChatGPT 爆炸了!知乎相关搜索量猛增59.6%

    ChatGPT 爆炸了!知乎相关搜索量猛增59.6%

    最近ChatGPT的火爆,用微软联合创始人的比尔盖茨对ChatGPT的评价,其历史意义“不亚于互联网和个人电脑(PC)的诞生”。 早在ChatGPT火爆朋友圈之前,知乎上就已经出现了关于ChatGPT、AIGC研究进展、技术升级、产业应用等的激烈讨论。 数据显示,截至2月8日,知乎网站ChatGPT

    06-17

  • 康年投资控股收购高端种植体公司Neoss

    康年投资控股收购高端种植体公司Neoss

    据12月23日消息,牙科行业的建设者康年投资宣布收购全球领先种植体公司尼奥斯(Neoss)。 收购完成后,尼奥斯(Neoss)将保持独立运营。 在松柏投资的支持下,将为牙科患者提供先进的治疗技术和全面的培训支持。 尼奥斯 (Neoss) 董事长和首席执行官迈克尔 J. 多默 (Michael

    06-18

  • 普洛斯日本物流发展基金第四期首轮募资27.5亿美元

    普洛斯日本物流发展基金第四期首轮募资27.5亿美元

    据投资界10月19日消息,普洛斯宣布设立第四期日本物流发展基金(以下简称“普洛斯”) GLP 日本开发基金 IV”)。 这是迄今为止在日本投资的最大私募股权房地产基金,首轮融资达27.5亿美元。 该基金打破了普洛斯日本物流发展基金第三期2016年创下的23亿美元募资纪录。 普洛斯

    06-17

  • 高瓴与涂鸦智能共同成立涂鸦物联网产业基金,总规模4亿美元

    高瓴与涂鸦智能共同成立涂鸦物联网产业基金,总规模4亿美元

    4月26日,在全球硬技术开发者大会(深圳)上,高瓴与涂鸦智能宣布成立涂鸦物联网产业基金。 该基金总规模达4亿美元,旨在支持全球有潜力的物联网企业和项目,共同打造多元化、丰富的全球智能商业生态系统。 该基金总规模达4亿美元,旨在支持全球有潜力的物联网企业和项目,共

    06-17

  • 浪潮信息:2020年营收630.38亿元,同比增长22.04%

    浪潮信息:2020年营收630.38亿元,同比增长22.04%

    浪潮信息近日发布年报。 报告显示,2019年其营收为3800万元,同比增长22.04%;归属于上市公司股东的净利润14.66亿元,同比增长57.90%。

    06-17

  • 西盟科技获新一轮融资,国科嘉禾与方广投资共同投资

    西盟科技获新一轮融资,国科嘉禾与方广投资共同投资

    投资界消息,电子生产设备领域一站式解决方案提供商熙盟科技宣布获得新一轮融资。 本轮融资由国科嘉禾和方广投资共同投资。 希盟科技于2011年成立于昆山清华科技园,专注于半导体级高速点胶、高精度运动控制、智能CCD定位检测等领域的研发与应用。 PH在精密流体、运动控制、C

    06-17

  • 罚款、逮捕,为何阻止不了国产手机进入印度?

    罚款、逮捕,为何阻止不了国产手机进入印度?

    印度对国产手机厂商的调查仍在继续。 据印度报业托拉斯报道,印度执法局周二逮捕了四人,包括Lava国际移动的董事总经理Hari Om Rai、会计师的Nitin Garg和Rajan Bai,罪名是涉嫌为vivo谋利的洗钱活动。 邓和中国vivo员工安德鲁匡(Andrew Kuang)。 这些人将面临三天的拘留。 v

    06-18

  • 唐志公测-美的智能消毒洗地机X8用户体验

    唐志公测-美的智能消毒洗地机X8用户体验

    本文,作者是体验者@KC 熊朗布,首发于唐知公测。 篇首语 无论是大房子还是小房子,地板清洁都是日常必须要做的家务。 传统上,清洁地板通常是先吸尘,然后用拖把/抹布清洁地板。 虽然用吸尘器清洁地板很方便,但当我用抹布擦地板时,老板经常抱怨抹布没洗,地板擦得不够干净

    06-21

  • 瑞士教育公司Kahoot获1700万美元融资,由Datum Invest AS领投

    瑞士教育公司Kahoot获1700万美元融资,由Datum Invest AS领投

    据投资界3月19日消息,挪威初创公司Kahoot正式宣布完成1万美元融资。 本轮融资由 Datum Invest AS 领投,Northzone、Creandum、Microsoft Ventures 和 Kahoot! 跟投。 平台主席 Eilert Hanoa。 据猎云网了解,该公司估值已达1亿美元。   Kiddom成立于2007年,最初是一个记

    06-17

  • 马可-能源数字服务运营商“浙大能源”完成超亿元A轮融资,源码参与投资

    马可-能源数字服务运营商“浙大能源”完成超亿元A轮融资,源码参与投资

    #马可源码与码荟成员要闻 近日,能源数字服务运营商浙大能源完成过亿元A轮融资。 元融资,本轮融资由高瓴创投领投,源码资本、Creo Capital跟投。 浙大能源(ZDPOWER)是一家引领中国电力能源智能化转型和低碳演进的创新型国家高新技术企业。 拥有国内先进的智慧能源、智能电

    06-17