鸿蒙进阶-List组件

hello大家好,这里是鸿蒙开天组,今天我们来讲讲常用的List组件,也就是列表组件。

List组件

List 组件的基本用法,可以用它来展示列表,并且实现列表滚动,日常开发的时候还可以用它来实现更为复杂的效果。

链接(华为官方文档)

列表是一种复杂的容器,当列表项达到一定数量,超过List容器组件大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等)。

List 表示列表容器,ListItem表示单个列表项,可以包含单个子组件。

简单了解过概念之后,让我们看看它怎么使用吧

基本使用

List() {listItem() {}.....
}

示例:

@Entry
@Component
struct Index {build() {Column() {List() {ListItem() {Text('文字').width("100%").height(40).backgroundColor(Color.Pink)}        }.width('100%').height(200).backgroundColor('#ccc')}}
}

list通常配合foreach进行使用,这里我们简单了解一下它的结构,后续我们会逐步介绍。

让我们先来看看它的常用属性

常用属性

滚动条状态

属性:scrollBar()

参数:枚举 BarState

  • Off: 不显示
  • On:常驻显示
  • Auto:按需显示(触摸时显示,2s 后消失)
List() {listItem()......
}.scrollBar(BarState.Off)

这个属性主要是用于管理滚动条的,可以通过修改让滚动条显示或消失。

分割线样式

属性:divider()

参数:{ strokeWidth: 数字, color?: 'color', startMargin?: 数字, endMargin?: 数字 }

List() {listItem()......
}.divider({strokeWidth: 1,color: Color.Orange,startMargin: 10,endMargin: 10})

list组件默认不具有分割线。

分组展示

让我们实现这样一个效果

核心用法:

  1. List作为顶级容器
  2. ListItemGroup 作为分组容器
  3. ListItem作为 List 或者ListItemGroup的子组件

ListItemGroup组件参数,以对象形式传入

ListItemGroup(参数){}.属性()

参数名

参数类型

必填

参数描述

header

CustomBuilder

设置ListItemGroup头部组件。

footer

CustomBuilder

设置ListItemGroup尾部组件。

space

number | string

列表项间距。只作用于ListItem与ListItem之间,不作用于header与ListItem、footer与ListItem之间。

ListItemGroup组件属性,和 List 是一样的

名称

参数类型

描述

divider

{

strokeWidth: Length,

color?: ResourceColor,

startMargin?: Length,

endMargin?: Length

} | null

用于设置ListItem分割线样式,默认无分割线。

strokeWidth: 分割线的线宽。

color: 分割线的颜色。

startMargin: 分割线距离列表侧边起始端的距离。

endMargin: 分割线距离列表侧边结束端的距离。

strokeWidth, startMargin和endMargin不支持设置百分比。

基础代码

@Entry
@Component
struct ListItemGroup_01 {@BuilderheaderBuilder() {Text('我是头部')}@BuilderfooterBuilder() {Text('我是底部')}build() {List() {ListItemGroup({header: this.headerBuilder(),footer: this.footerBuilder(),space: 20}) {ListItem() {Text('我是内容').backgroundColor(Color.Orange)}ListItem() {Text('我是内容').backgroundColor(Color.Orange)}}.divider({ strokeWidth: 1, color: Color.Orange,startMargin:40 })}}
}

试一试:

  1. 测试参数及属性的使用
  2. 实现如下效果

实现结果

@Entry
@Component
struct ContactsList {build() {List() {ListItemGroup({ header: this.itemHead('A'), space: 20 }) {// 循环渲染分组A的ListItemthis.contactBuilder('艾佳')this.contactBuilder('安安')this.contactBuilder('艾米丽')}.divider({startMargin: 60,strokeWidth: 1,color: '#ccc'})ListItemGroup({ header: this.itemHead('B'), space: 20 }) {// 循环渲染分组B的ListItemthis.contactBuilder('白客')this.contactBuilder('白夜')this.contactBuilder('博明')}.divider({startMargin: 60,strokeWidth: 1,color: '#ccc'})}}@BuilderitemHead(text: string) {// 列表分组的头部组件,对应联系人分组A、B等位置的组件Text(text).fontSize(20).backgroundColor('#fff1f3f5').width('100%').padding(5)}@BuildercontactBuilder(name: string) {ListItem() {Row({ space: 10 }) {Image($r('app.media.ic_public_lianxiren')).width(40).fillColor('#e4b99a')Text(name)}}}
}

粘性标题

sticky

StickyStyle

配合ListItemGroup组件使用,设置ListItemGroup中header和footer是否要吸顶或吸底。

默认值:StickyStyle.None

该接口支持在ArkTS卡片中使用。

说明:

sticky属性可以设置为 StickyStyle.Header | StickyStyle.Footer 以同时支持header吸顶和footer吸底。

通过这个属性,可以实现粘性标题

List(){}// .sticky(StickyStyle.None) // 不吸附 默认值// .sticky(StickyStyle.Header) // 头部吸附// .sticky(StickyStyle. Footer) //  底部吸附,如果有的话

控制滚动

如果列表很长,需要快速滚动到列表底部或返回列表顶部,就可以使用控制器来控制滚动

链接

核心步骤:

  1. 创建控制器(Scroller)对象,不需要添加@State
  2. 设置给 List 组件
  3. 调用控制器对象的方法,实现滚动
// 1. 创建控制器(ListScroller)对象
scroller: Scroller = new Scroller()
// 2. 设置给 List 组件
List({ space: 20, scroller: this.scroller }) {// ...
}Button() {// ...
}
.onClick(() => {// 3. 调用控制器对象的方法,实现滚动this.scroller.scrollToIndex(0)
})

scrollToIndex方法参数:

参数名

参数类型

必填

参数描述

index

number

要滑动到的目标元素所在的ListItemGroup在当前容器中的索引值。

smooth

boolean

设置滑动到列表项在列表中的索引值时是否有动效,true表示有动效,false表示没有动效。

默认值:false。

align

ScrollAlign

指定滑动到的元素与当前容器的对齐方式。

默认值:ScrollAlign.START。

List事件

List 组件提供了很多事件供咱们使用,目前掌握一个即可onScrollIndex,其他的事件后续结合业务逻辑再进行补充

链接

名称

功能描述

onScrollIndex(event: (start: number, end: number, center10+: number) => void)

有子组件划入或划出List显示区域时触发。从API version 10开始,List显示区域中间位置子组件变化时也会触发。

计算索引值时,ListItemGroup作为一个整体占一个索引值,不计算ListItemGroup内部ListItem的索引值。

- start: List显示区域内第一个子组件的索引值。

- end: List显示区域内最后一个子组件的索引值。

- center: List显示区域内中间位置子组件的索引值。

....其他事件后续再进行补充

    List(){// ...}.onScrollIndex((index: number) => {console.log('index:', index)})

好嘞,今天就这样啦,感谢大家观看!这里是鸿蒙开天组,我们下次再见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6289.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

EDA技术简介

目录 可编程逻辑器件 CPLD/FPGA 基于查找表结构的FPGA 硬件描述语言 EDA软件 EDA技术的 应用领域 电子系统的设计方法 EDA (Electronic Design Automation,电子设计自动化) 以可编程逻辑器件 (Programmable Logic Device,简称PLD)为实现载体、以硬件描述语言 (Hardwar…

【java】实战-力扣题库:有序数组的平方

问题描述 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 问题分析: 既然给定的是一个 非递减顺序的数组 我们可以使用双指针 , 一个指向左边,一个指向…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

Jupyter Notebook添加kernel的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Python Matplotlib 如何绘制股票或金融数据图

Python Matplotlib 如何绘制股票或金融数据图 在金融领域,数据可视化是分析市场趋势、股票表现和财务健康的重要工具。Python 的 Matplotlib 库为我们提供了强大的功能来绘制股票和金融数据图。本文将详细介绍如何使用 Matplotlib 绘制这些图表,并且结合…

Chrome离线安装包下载

微软的Bing屏蔽了Chrome的搜索结果,需要通过百度搜索。 或者直接访问Chrome的官网:Google Chrome 网络浏览器 直接下载的是在线安装包,安装需要联网。 如果需要在无法联网的设备上安装Chrome,需要在上面的地址后面加上?standalon…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后,就分别得到了对应的lib库,如下图: 再生成Release后如下图:

masm汇编键盘读取字符串换行输出演示

从键盘输入字符串按回车后换行输出 ASSUME CS:CODE, DS:DATA DATA SEGMENT BUFFER DB 20DB ?DB 20 DUP(0) CRLF DB 0AH, 0DH,$ DATA ENDS CODE SEGMENT …

python爬取m3u8视频(思路到实现全讲解!!!)

文章目录 抓取m3u8视频1、思路分析2、实现分析index.m3u8 3、代码实现3.1 获取最后一个m3u8的url地址3.2 多线程下载ts文件与视频合并3.3 合并获取上面俩个代码段的代码 4、注意事项4.1 说明4.2 使用代码进行处理4.3 完整代码 5、解密处理 处理m3u8文件中的url问题 抓取m3u8视频…

html语法

网站是指在因特网上根据一定规则,使用html等制作的用于展示特定内容相关的网页集合 网站由很多网页组成,网页是构成网站的基本元素,通常由图片、连接、视频、声音、文字等元素组成,一般用.htm和.html做后缀,又被称为h…

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

[ DOS 命令基础 3 ] DOS 命令详解-文件操作相关命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮

文章目录 1、案例效果2、文件创建与代码实现1、创建文件2、图标资源文件3、源代码获取1、案例效果 2、文件创建与代码实现 1、创建文件 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 RadarEffactWindow.xaml 。代码功能分两个部分完成,一个是样式,一个是动画。页…

git中使用tag(标签)的方法及重要性

在Git中打标签&#xff08;tag&#xff09;通常用于标记发布版本或其他重要提交。 Git中打标签的步骤&#xff1a; 列出当前所有的标签 git tag创建一个指向特定提交的标签 git tag <tagname> <commit-hash>创建一个带注释的标签&#xff0c;通常用于发布版本 git…

让火患无处遁形,RFID智能应急消防管理来帮忙

我国常受自然灾害侵扰&#xff0c;灾害间的相互影响日益加剧&#xff0c;给灾害救援任务带来了前所未有的挑战。当前&#xff0c;专业救援队伍的实力亟需扩充&#xff0c;现代救援装备的配置亟须加强&#xff0c;保障体系亟待优化&#xff0c;应急预案及联动作战机制亦需深化完…

新视野大学英语读写教程1第四版PDF+答案+听力音频

《新视野大学英语》(第四版) 系列教材包含1—4级&#xff0c; 供两个学年使用。每一级别包含《读写教程》(配教师用书)、《视听说教程》(配教师用书)、《综合训练》和《长篇阅读》。教材提供教学管理平台、数字课程、微课视频、移动学习应用、教学课件、试题库等立体丰富的教学…

华为手机卸载系统应用的方法

摘要&#xff1a; 1.手机环境&#xff1a;手机需要开启开发者模式并使用usb连接电脑&#xff0c;并选择文件传输模式 2.电脑环境&#xff1a;使用鸿蒙工具箱进行傻瓜操作或安装adb工具进行命令卸载 3.鸿蒙工具箱和adb工具本质都是使用adb shell pm uninstall -k --user 0 xx…

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台&#xff0c;优化邮件列表&#xff0c;确保内容优质&#xff0c;进行邮件测试&#xff0c;关注用户反馈调整频率&#xff0c;以保高送达率&#xff0c;提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前&#xff0c;首先需要理解电…

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys ry-cloud报错原因解决 ry-cloud 报错 系统监控→在线用户打开后报错 报错信息如下 class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys原因 type导致&#xff…

靠Python真的能实现经济自由,学会了你也可以

不知道大家有没有注意到&#xff0c;最近关注的很多人都在聊“副业and兼职”这件事。 毕竟单一收入已经不能满足现代人的需求了。 对于普通人来说&#xff0c;想要跳出固定思维和舒适圈&#xff0c;相比于孤注一掷的创业&#xff0c;更推荐兼职。 很多人想要创业&#xff0c;…