当前位置: 首页 > 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.jsqmd.com/news/173222/

相关文章:

  • 【JetCompose】入门教程实战基础案例03之凡尔赛朋友圈
  • 高频Robot Framework软件测试面试题
  • 全面讲解并发编程模式,重点分析其在 .NET 中的实现
  • NET Runtime 8.0.13实战深度解析
  • Overcoming the uncertainty challenges in detecting building changes from remote sensing images
  • 【课程设计/毕业设计】基于springboot的畜牧管理系统的设计与实现 基于Springboot的牧场管理系统的设计与实现【附源码、数据库、万字文档】
  • 2025-12-31
  • 12月第二篇笔记
  • Java毕设选题推荐:基于Springboot的牧场管理系统的设计与实现基于springboot的畜牧管理系统的设计与实现 【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 全网最详细的软件测试面试题总结+基础知识(完整版)
  • 链表的逻辑 - f
  • 6个值得收藏的AI论文工具,智能降重与改写让论文更流畅且规避查重问题
  • [KaibaMath]1035 调和平均数的一个基本性质及证明
  • 年薪50W的软件测试面试题,到底长啥样?
  • 腾讯智能工作台ima.copilot
  • [KaibaMath]1034 关于AS⁻B=BS⁻A的证明
  • 大模型呼叫中心选型指南:从七大厂商透视到三步决策法
  • AI论文降重平台排名:9款工具实测,开题报告撰写功能同样出色
  • 【深入理解 Android 中的 build.gradle 文件】
  • 计算机Java毕设实战-基于Springboot的牧场管理系统的设计与实现springboot的牧场信息化系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • idea将配置移动到自定义位置
  • 【Android Gradle 构建常见报错及解决方法大全】
  • Linux命令-ifconfig命令(配置和显示网络接口的信息)
  • SHA-256轮函数深度解析:八人舞蹈团的精密舞步
  • 还在熬夜赶论文?7款AI工具效率飙升100%!
  • 原理图Capture CIS 设计的学习2
  • 【【完整解决】阿里云百炼NUI SDK DEMO升级指南:告别Android Studio编译噩梦!】
  • AI智能体提升HR管理,eHR平台定制HR智能体服务助手
  • MyBatis隐形炸弹:selectByExampleWithBLOBs使用不当性能下降80%
  • CFD软件怎么选?实用选型指南——从需求匹配到工具价值的深度解析