news 2026/5/28 20:47:26

【JetCompose】入门教程实战基础案例02之列表项显隐效果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【JetCompose】入门教程实战基础案例02之列表项显隐效果

子组件item预览

dataclassMessage(val author:String,val body:String)@Composable funMessageCard(message:Message,modifier:Modifier){Box(modifier=modifier.background(MaterialTheme.colorScheme.primary,// 全屏宽度shape=MaterialTheme.shapes.medium).fillMaxWidth()){Row(verticalAlignment=Alignment.CenterVertically){Image(painter=painterResource(id=R.drawable.avatar),contentDescription=null,Modifier.padding(all=8.dp).size(40.dp).clip(CircleShape))Column(modifier=Modifier.padding(end=8.dp)){Text(text="Hello ${message.author}",color=MaterialTheme.colorScheme.onPrimary)Text(text=message.body,color=MaterialTheme.colorScheme.onPrimary)}}}}

预览效果

@Preview(name="MessageCardPreview",showBackground=true)@Composable funPreviewMessageCard(){MessageCard(Message("gaofeng","hello world"),modifier=Modifier.padding(all=8.dp))}

子组件改造

描述文字添加背景,圆角

Column(modifier=Modifier.padding(end=8.dp)){Text(text="Hello ${message.author}",color=MaterialTheme.colorScheme.onPrimary)Spacer(modifier=Modifier.height(4.dp))Surface(shape=MaterialTheme.shapes.medium,shadowElevation=1.dp){Text(text=message.body,modifier=Modifier.padding(horizontal=4.dp),)}}

as中预览效果

模拟数据生成列表


Conversation组件

@Composable funConversation(messages:List<Message>){LazyColumn(contentPadding=PaddingValues(0.dp,4.dp),verticalArrangement=Arrangement.spacedBy(4.dp)){items(messages){MessageCard(message=it,modifier=Modifier)}}}@Preview(name="ConversationPreview",showBackground=true)@Composable funPreviewConversation(){Conversation(SampleData.conversationSample)}

模拟数据

importcom.gaofeng.comps.Message/** * SampleData for Jetpack Compose Tutorial */object SampleData{// Sample conversation dataval conversationSample=listOf(Message("Lexi","Test...Test...Test..."),Message("Lexi","""ListofAndroid versions:|AndroidKitKat(API19)|AndroidLollipop(API21)|AndroidMarshmallow(API23)|AndroidNougat(API24)|AndroidOreo(API26)|AndroidPie(API28)|Android10(API29)|Android11(API30)|Android12(API31)""".trim()),Message("Lexi","""Ithink Kotlin is my favorite programming language.|It's so much fun!""".trim()),Message("Lexi","Searching for alternatives to XML layouts..."),Message("Lexi","""Hey,take a look at Jetpack Compose,it's great!|It's the Android's modern toolkitforbuilding nativeUI.|It simplifies and acceleratesUIdevelopment on Android.|Less code,powerful tools,and intuitive Kotlin APIs:)""".trim()),Message("Lexi","It's available from API 21+ :)"),Message("Lexi","Writing Kotlin for UI seems so natural, Compose where have you been all my life?"),Message("Lexi","Android Studio next version's name is Arctic Fox"),Message("Lexi","Android Studio Arctic Fox tooling for Compose is top notch ^_^"),Message("Lexi","I didn't know you can now run the emulator directly from Android Studio"),Message("Lexi","Compose Previews are great to check quickly how a composable layout looks like"),Message("Lexi","Previews are also interactive after enabling the experimental setting"),Message("Lexi","Have you tried writing build.gradle with KTS?"),)}


MessageCard组件核心逻辑

@Composable funMessageCard(message:Message,modifier:Modifier){Box(modifier=modifier.fillMaxWidth().padding(0.dp,8.dp)){Row(verticalAlignment=Alignment.CenterVertically){Image(painter=painterResource(id=R.drawable.avatar),contentDescription=null,Modifier.padding(all=8.dp).size(40.dp).clip(CircleShape))varisExpanded by remember{mutableStateOf(false)}val surfaceColor byanimateColorAsState(if(isExpanded)MaterialTheme.colorScheme.primaryelseMaterialTheme.colorScheme.surface)Column(modifier=Modifier.padding(end=8.dp).clickable{isExpanded=!isExpanded}){Text(text="Hello ${message.author}",color=MaterialTheme.colorScheme.primary)Spacer(modifier=Modifier.height(4.dp))Surface(shape=MaterialTheme.shapes.medium,shadowElevation=1.dp,color=surfaceColor,modifier=Modifier.animateContentSize().padding(1.dp)){Text(text=message.body,modifier=Modifier.padding(horizontal=4.dp),maxLines=if(isExpanded)Int.MAX_VALUEelse1,)}}}}}

Main组件核心逻辑

classMainActivity06:ComponentActivity(){override funonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)enableEdgeToEdge()setContent{MyJetCompomApp01Theme{Scaffold(modifier=Modifier.fillMaxSize().padding(10.dp)){innerPadding->// com.gaofeng.comps.MessageCard(Message("JetCompose", "Hello world"), modifier = Modifier.padding(innerPadding))Box(modifier=Modifier.fillMaxSize().padding(innerPadding)){com.gaofeng.comps.Conversation(SampleData.conversationSample)}}}}}}

最后实现效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 10:56:09

DeepSeek总结的SQL 数独:约束编程

原文: SQL Sudoku Constraint Programming #1 SQL 数独&#xff1a;约束编程 CM Lubinski 考虑数独游戏&#xff0c;最常在九乘九的单元格网格上进行&#xff0c;其中每个单元格可以包含1到9的整数之一。游戏规定每一行必须只包含互不相同的元素&#xff0c;每一列以及九个三…

作者头像 李华
网站建设 2026/5/20 20:28:20

全面讲解并发编程模式,重点分析其在 .NET 中的实现

并发编程模式概述并发编程模式用于解决多线程环境下资源共享、任务协调和性能优化问题。常见模式包括锁机制、无锁编程、任务并行、数据并行等。锁机制模式锁机制通过同步原语控制线程访问共享资源。.NET 提供以下实现&#xff1a;Monitor 类&#xff1a;通过 lock 关键字实现临…

作者头像 李华
网站建设 2026/5/20 13:46:57

高频Robot Framework软件测试面试题

在软件测试的面试过程中&#xff0c;Robot Framework工具的相关知识&#xff0c;可以说是必考的了&#xff0c;下面为大家整理了一些高频Robot Framework面试题&#xff0c;拿走不谢~ 1、什么是 Robot Framework&#xff1f; Robot Framework是一款python编写的功能自动化测试…

作者头像 李华
网站建设 2026/5/28 20:09:19

计算机Java毕设实战-基于Springboot的牧场管理系统的设计与实现springboot的牧场信息化系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/22 4:36:08

CFD软件怎么选?实用选型指南——从需求匹配到工具价值的深度解析

在科研与工程领域&#xff0c;计算流体动力学&#xff08;CFD&#xff09;已成为“虚拟实验”的核心工具——从航空航天的气动外形优化&#xff0c;到新能源汽车的电池热管理&#xff0c;再到电子设备的散热设计&#xff0c;CFD通过数值模拟还原流体流动、传热、多相流等复杂物…

作者头像 李华
网站建设 2026/5/22 5:27:06

用QuantConnect Lean打造算法交易的利器

LEAN算法交易引擎概述 LEAN是一个专业级的算法交易平台&#xff0c;由QuantConnect团队开发&#xff0c;支持 Python 和 C# 语言。该平台具备事件驱动的架构&#xff0c;适用于量化开发者&#xff0c;旨在帮助用户轻松构建和测试交易算法。LEAN不仅支持多种金融市场的回测和实…

作者头像 李华