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

【Android Compose】ListView效果

【Android Compose】ListView效果

  • 1、Column、Row 和 Box
  • 2、LazyColumn和LazyRow
  • 3、Compose 中的状态
  • 4、ListView效果
  • 5、android-compose-codelabs

Jetpack Compose 使用入门
Jetpack Compose 教程
Jetpack Compose


1、Column、Row 和 Box

Compose 中的三个基本标准布局元素是 Column、Row 和 Box 可组合项。

在这里插入图片描述

2、LazyColumn和LazyRow

androidx.compose.foundation.lazy.LazyColumn
androidx.compose.foundation.lazy.LazyRow
androidx.compose.foundation.lazy.items

3、Compose 中的状态

7. Compose 中的状态

  • mutableStateOf 函数,该函数可让 Compose 重组读取该 State 的函数
  • 如需在重组后保留状态,请使用 remember 记住可变状态
  • onClick 它不接受值,而接受函数
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
// ...@Composable
fun Greeting(...) {val expanded = remember { mutableStateOf(false) }ElevatedButton(onClick = { expanded.value = !expanded.value },) {Text(if (expanded.value) "Show less" else "Show more")}
}

4、ListView效果

https://gitee.com/xhbruce/XhAndroidDemo
在这里插入图片描述

package com.xhbruce.xhandroiddemoimport Message
import SampleData
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.view.WindowCompat
import com.xhbruce.xhandroiddemo.ui.theme.XhAndroidDemoThemeclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)enableEdgeToEdge()WindowCompat.setDecorFitsSystemWindows(window, true)setContent {XhAndroidDemoTheme {//PreviewGreeting()Conversation(SampleData.conversationSample)}}}
}@Composable
fun MessageCard(msg: Message) {// We keep track if the message is expanded or not in this// variablevar isExpanded by remember { mutableStateOf(false) }// surfaceColor will be updated gradually from one color to the otherval surfaceColor by animateColorAsState(if (isExpanded)MaterialTheme.colorScheme.primaryelseMaterialTheme.colorScheme.surface,)// We toggle the isExpanded variable when we click on this ColumnColumn(modifier = Modifier.clickable { isExpanded = !isExpanded }.fillMaxSize()) {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium,shadowElevation = 1.dp,// surfaceColor color will be changing gradually from primary to surfacecolor = surfaceColor,// animateContentSize will change the Surface size graduallymodifier = Modifier.animateContentSize().padding(1.dp)) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),// If the message is expanded, we display all its content// otherwise we only display the first linemaxLines = if (isExpanded) Int.MAX_VALUE else 1,style = MaterialTheme.typography.bodyMedium)}}
}@Composable
fun Conversation(messages: List<Message>) {LazyColumn {items(messages) { message ->MessageCard(message)}}
}@Preview
@Composable
fun PreviewMessageCard() {XhAndroidDemoTheme {Conversation(SampleData.conversationSample)}
}@Preview
@Composable
fun PreviewGreeting() {val expanded = remember { mutableStateOf(false) }ElevatedButton(onClick = { expanded.value = !expanded.value },) {Text(if (expanded.value) "Show less" else "Show more")}
}

5、android-compose-codelabs

git clone https://github.com/googlecodelabs/android-compose-codelabs.git

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《操作系统》(学习笔记)(王道)
  • Pytorch使用教学6-张量的分割与合并
  • UE4Editor.exe运行与调试 “-run=XX” 命令行
  • LabVIEW放大器自动测量系统
  • PHP设计模式-简单工厂模式
  • 【Apache Doris】数据副本问题排查指南
  • StarryCoding-35:鼠鼠我鸭
  • C语言开关迷宫
  • 物理机 gogs+jenkins+sonarqube 实现CI/CD
  • Ubuntu转竖屏,文件解锁和查看mac地址命令记录
  • 力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法
  • ECCV2024|LightenDiffusion 超越现有无监督方法,引领低光图像增强新纪元!
  • Jsoup爬虫——自学习梳理
  • Connecting weaviate with langflow across docker containers
  • 【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • ComponentOne 2017 V2版本正式发布
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Mysql优化
  • PV统计优化设计
  • vue-cli3搭建项目
  • 今年的LC3大会没了?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 什么软件可以剪辑音乐?
  • 小程序开发中的那些坑
  • 一道面试题引发的“血案”
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • Spring第一个helloWorld
  • 大数据全解:定义、价值及挑战
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (02)vite环境变量配置
  • (10)STL算法之搜索(二) 二分查找
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (八十八)VFL语言初步 - 实现布局
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十)T检验-第一部分
  • (四)图像的%2线性拉伸
  • (一)Dubbo快速入门、介绍、使用
  • (原)Matlab的svmtrain和svmclassify
  • (转)VC++中ondraw在什么时候调用的
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET构架之我见