news 2026/4/25 21:15:43

【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/4/23 7:58:06

AI论文降重平台排名:9款工具实测,开题报告撰写功能同样出色

AI写论文平台排名&#xff1a;9个实测&#xff0c;开题报告论文降重都好用 工具对比排名表格 工具名称 核心功能 突出优势 Aibiye 降AIGC率 适配高校规则&#xff0c;AI痕迹弱化 Aicheck 论文降重 速度快&#xff0c;保留专业术语 Askpaper 论文降重 逻辑完整性好 …

作者头像 李华
网站建设 2026/4/17 20:20:38

基于腾讯元器搭建智能体“图片素材大师”Agent智能体搭建笔记

本文系统梳理基于腾讯元器平台构建“图片素材大师”智能体的全流程实操要点&#xff0c;涵盖前期需求锚定、核心功能搭建、图片检索工具集成、测试优化及运维保障等关键环节。该智能体采用单Agent架构开发&#xff0c;核心定位为“自然语言驱动的图像素材搜寻专家”&#xff0c…

作者头像 李华
网站建设 2026/4/25 17:18:00

【Kubernetes】K8s 1.35 配置 Docker 作为容器运行时

Kubernetes 1.24 移除了对 Docker 的直接支持&#xff0c;并且新版 K8s 主推更轻量的 Containerd&#xff0c;但 Docker 凭借其强大的生态依然是许多人的首选。本文将通过 cri-dockerd 这个 ‘适配器’&#xff0c;让 Kubernetes 中重新用上 Docker&#xff01;操作系统&#x…

作者头像 李华
网站建设 2026/4/23 12:45:19

JAVA final 详解

1. 核心答案1.1 final方法可以重载吗&#xff1f;✅ 可以重载。final修饰的方法可以被重载。1.2 final方法可以重写吗&#xff1f;❌ 不能重写。final修饰的方法不能被重写&#xff08;覆盖&#xff09;。2. 详细解释2.1 为什么final方法可以被重载&#xff1f;重载&#xff08…

作者头像 李华
网站建设 2026/4/22 9:49:50

Java 线程生命周期详解

1. 线程状态概述Java 线程在其生命周期中有 6 种状态&#xff0c;定义在 java.lang.Thread.State 枚举中&#xff1a;public enum State {NEW, // 新建RUNNABLE, // 可运行BLOCKED, // 阻塞WAITING, // 等待TIMED_WAITING, // 计时等待TERMINATED …

作者头像 李华
网站建设 2026/4/20 11:05:41

Synchronized 详解及 JDK 版本优化

1. Synchronized 基础1.1 Synchronized 的使用方式1.1.1 修饰实例方法public class SynchronizedMethod {// 修饰实例方法&#xff0c;锁是当前实例对象(this)public synchronized void instanceMethod() {// 临界区代码System.out.println("实例方法锁");} }1.1.2 修…

作者头像 李华