当前位置: 首页 > news >正文

【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)}}}}}}

最后实现效果

http://www.rkmt.cn/news/189090.html

相关文章:

  • 【毕业设计】基于Springboot的牧场管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 【课程设计/毕业设计】基于springboot的畜牧管理系统的设计与实现 基于Springboot的牧场管理系统的设计与实现【附源码、数据库、万字文档】
  • 2025-12-31
  • 6个值得收藏的AI论文工具,智能降重与改写让论文更流畅且规避查重问题
  • 年薪50W的软件测试面试题,到底长啥样?
  • [KaibaMath]1034 关于AS⁻B=BS⁻A的证明
  • 大模型呼叫中心选型指南:从七大厂商透视到三步决策法
  • idea将配置移动到自定义位置
  • 【Android Gradle 构建常见报错及解决方法大全】
  • 还在熬夜赶论文?7款AI工具效率飙升100%!
  • CFD软件怎么选?实用选型指南——从需求匹配到工具价值的深度解析
  • 提示工程架构师必知:Agentic AI记忆机制设计,智能体“思考”能力的核心
  • 大数据领域中Zookeeper与Kafka的协同工作模式
  • 【剑斩OFFER】算法的暴力美学——两两交换链表中的结点
  • 大数据存储引擎:行式存储的底层实现与高效查询方案
  • Java毕设项目推荐-基于SpringBoot社区医疗预约挂号平台的设计与实现医疗资源、挂号记录、就诊记录、问诊信息、报告解读、健康档案、社区互动【附源码+文档,调试定制服务】
  • 深度解析:基于流媒体协议的 FC2 视频内容解析与下载工程实践
  • 【更新至2024年】2007-2024年上市公司cnrds ESG评分数据
  • 医疗数据用Git-LFS存储大文件稳住协作
  • 使用GitHub CLI(gh)来创建 GitHub Issue
  • EZAccess安装注意事项及安装教程
  • 20232428 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • 痛并煎熬着
  • 20道经典软件测试面试题(答案+文档)
  • AI智能体协作:构建更精准的公司破产预测模型
  • [开源自荐]iTranslation 简单快捷的翻译软件,支持数十种语言互译
  • 【状态估计】基于LMS类自适应滤波算法、NLMS 和 LMF 进行系统识别比较研究附Matlab代码
  • 软件测试常考面试题及参考答案(待更新)
  • 小试牛刀-基于几何要素分辨insar升降轨道数据