news 2026/6/15 9:14:02

【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/2 13:02:35

Day 51 在预训练 ResNet18 中注入

预训练 ResNet18 模型注入方法在预训练的 ResNet18 模型中注入自定义模块或修改现有结构时&#xff0c;需确保不破坏原有特征提取能力。以下是常见注入方法&#xff1a;修改特定层结构 通过替换或扩展特定层&#xff08;如卷积层、全连接层&#xff09;实现功能注入。例如&…

作者头像 李华
网站建设 2026/6/10 22:24:49

Linux命令-ifconfig命令(配置和显示网络接口的信息)

&#x1f9ed; 说明 ifconfig 命令用于在 Linux 系统中配置和显示网络接口的信息。虽然现代系统更推荐使用 ip 命令&#xff0c;但 ifconfig 因其简单直观&#xff0c;仍在许多场景下被广泛使用。 下表汇总了 ifconfig 的核心功能。功能类别命令示例作用说明查看接口状态ifconf…

作者头像 李华
网站建设 2026/6/15 13:52:02

大数据存储引擎:行式存储的底层实现与高效查询方案

大数据存储引擎深度解析&#xff1a;行式存储的底层实现与高效查询优化方案 摘要/引言 想象一下&#xff1a;当你在电商平台下单时&#xff0c;系统需要快速记录你的订单ID、用户信息、商品列表、支付状态等整行数据&#xff1b;当你修改收货地址时&#xff0c;系统需要原子性地…

作者头像 李华
网站建设 2026/6/14 22:30:53

设置后台JOB

在程序中启用后台JOB如果是本程序&#xff0c;可以使用标准函数抓取CALL FUNCTION RS_REFRESH_FROM_SELECTOPTIONSEXPORTINGcurr_report sy-repidTABLESselection_table lt_sel_parameterEXCEPTIONSnot_found 1no_report 2OTHERS 3.下边是完整的…

作者头像 李华
网站建设 2026/6/15 10:27:23

2000-2024年各省、地级市银行竞争度HHI数据

地级市省级银行竞争度HHI数据2000-2024年 参考姜付秀&#xff08;2019&#xff09;方法&#xff0c;基于国泰安银行经济数据库构建。通过各银行年度分支机构数量&#xff0c;测算赫芬达尔-赫希曼指数&#xff08;HHI&#xff09;&#xff0c;精准评估银行竞争水平。 - 原始数据…

作者头像 李华
网站建设 2026/6/15 13:55:31

Linux 调度延迟案例 (1):ALSA 播放延迟

文章目录1. 前言2. 现场3. 问题分析1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 现场 通过 trace-cmd 抓如下事件&#xff1a; ALSA事件&#xff1a;hwptr, hw_mask_param, applptr调度事件…

作者头像 李华