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

Compose笔记(五十)--stickyHeader

        这一节主要了解一下Compose中的stickyHeader,在Jetpack Compose开发中,stickyHeader是用于实现 "粘性头部" 效果的API,主要用于列表(如 LazyColumn)中,当滚动列表时,指定的头部会固定在顶部,直到下一个头部出现并将其顶出视野。简单总结:

API 
stickyHeader是LazyListScope 的扩展函数,主要有以下两种形式:

    @ExperimentalFoundationApifun stickyHeader(key: Any? = null,contentType: Any? = null,content: @Composable LazyItemScope.() -> Unit)

作用:在列表中创建粘性头部,滚动时会固定在顶部
key:用于标识头部,当数据变化时帮助Compose识别是否需要重新绘制
contentType:标识标题内容的类型,辅助Compose的布局优化。
content:头部的内容布局

场景
1 分组数据导航
2 时间轴或步骤指示
3 复杂列表结构

栗子:

import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp// 数据模型
data class CategoryItem(val category: String,val items: List<String>
)@OptIn(ExperimentalFoundationApi::class)
@Composable
fun StickyHeaderDemo() {val categories = listOf(CategoryItem(category = "A",items = listOf("Apple", "Apricot", "Avocado","Apple1", "Apricot", "Avocado","Apple2", "Apricot", "Avocado","Apple3", "Apricot", "Avocado")),CategoryItem(category = "B",items = listOf("Banana", "Blueberry", "Blackberry","Banana", "Blueberry", "Blackberry","Banana", "Blueberry", "Blackberry","Banana", "Blueberry", "Blackberry","Banana", "Blueberry", "Blackberry")),CategoryItem(category = "C",items = listOf("Cherry", "Coconut", "Cranberry","Cherry", "Coconut", "Cranberry","Cherry", "Coconut", "Cranberry","Cherry", "Coconut", "Cranberry",)),CategoryItem(category = "D",items = listOf("Date", "Dragonfruit")))LazyColumn(modifier = Modifier.fillMaxSize()) {categories.forEach { category ->stickyHeader(key = category.category) {Text(text = category.category,modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.primaryContainer).padding(12.dp),color = MaterialTheme.colorScheme.primary,fontSize = 18.sp,fontWeight = FontWeight.Bold)}items(category.items) { item ->Text(text = item,modifier = Modifier.fillMaxWidth().padding(16.dp),fontSize = 16.sp)}}}
}

注意:
必须配合LazyColumn使用:stickyHeader是LazyListScope的扩展函数,只能在LazyColumn的作用域内使用
合理设置key:为每个粘性头部设置唯一key可以提高性能,避免不必要的重组
注意头部样式:粘性头部会覆盖在列表项上方,建议设置明显的背景色区分
避免复杂布局:粘性头部应保持轻量,复杂布局可能影响滚动性能

http://www.xdnf.cn/news/1487017.html

相关文章:

  • 超越模仿,探寻智能的本源:从人类认知机制到下一代自然语言处理
  • MySQL 锁机制解析
  • 【高并发内存池】五、页缓存的设计
  • 【多模态学习】QA2:Tokenize和Embedding?BPE算法?交叉熵损失函数?
  • 算法:链表
  • 【开题答辩全过程】以 线上助农系统为例,包含答辩的问题和答案
  • 10 qml教程-自定义属性
  • 860章:使用Scrapy框架构建分布式爬虫
  • browser_use event_bus订阅机制详解
  • AUTOSAR进阶图解==>AUTOSAR_SWS_TimeSyncOverFlexRay
  • 轻松Linux-8.动静态库的制作及原理
  • SoundSource for Mac 音频控制工具
  • PyTorch Lightning(训练评估框架)
  • Python+DRVT 从外部调用 Revit:批量创建楼板
  • 基于SpringBoot+Vue的健身房管理系统的设计与实现(代码+数据库+LW)
  • 多环境配置切换机制能否让开发与生产无缝衔接?
  • 【论文阅读】自我进化的AI智能体综述
  • Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
  • 《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
  • LeetCode 面试经典 150 题:移除元素(双指针思想优化解法详解)
  • RICOH理光 Priport DX4443c速印机 印A3的问题
  • 数据结构之二叉树(2)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘setuptools’问题
  • 嵌入式学习---(ARM)
  • AutoHotkey将脚本编译为exe文件
  • DevOps实战(3) - 使用Arbess+GitLab+Hadess实现Java项目自动化部署
  • 【Java基础|第三十五篇】类加载与反射
  • 如何在Python中使用正则表达式?
  • 基于Apache Flink Stateful Functions的事件驱动微服务架构设计与实践指南
  • Flink TaskManager日志时间与实际时间有偏差