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

HarmonyOS6 ArkTS ListItemGroup设置多列布局

文章目录

    • 一、核心概念
      • 1. 多列布局原理
      • 2. 关键属性
    • 二、多列布局核心配置
      • 1. List配置列数
      • 2. 子项对齐配置
      • 3. ListItemGroup适配
    • 三、完整实现示例
    • 五、多列布局效果与规则
      • 1. 界面展示效果
      • 2. 布局规则
    • 总结

一、核心概念

1. 多列布局原理

  • 配置入口:多列布局不由ListItemGroup控制,而是由其父容器List通过lanes属性统一配置;
  • 作用范围lanes配置后,List内所有ListItemGroup的子项都会自动按指定列数排列;
  • 布局规则:系统自动计算子项宽度,平均分配列空间,自动换行展示。

2. 关键属性

  1. lanes:List的核心属性,设置纵向滚动时的列数,取值为正整数,默认1(单列);
  2. alignListItem:List属性,设置子项在交叉轴(列方向)的对齐方式,支持Start/Center/End
  3. ListItemGroup:仅作为分组容器,承载子项与Header/Footer,不参与列数计算。

二、多列布局核心配置

1. List配置列数

通过lanes属性设置列数,是实现多列布局的唯一入口:

List(){// ListItemGroup + 子项}.lanes(3)// 设置3列布局

2. 子项对齐配置

通过alignListItem优化多列子项的对齐效果:

List().lanes(3).alignListItem(ListItemAlign.Center)// 子项在列内居中对齐

3. ListItemGroup适配

ListItemGroup无需额外配置,Header/Footer会自动铺满整行,子项自动按列排列:

  • 头部Header:独占一行,宽度100%
  • 子项ListItem:自动分配列宽,多列排列
  • 尾部Footer:独占一行,宽度100%

三、完整实现示例

// xxx.etsimport{ComponentContent}from'@kit.ArkUI';import{TimeTable,ProjectsDataSource,TimeTableDataSource}from'./ListDataSource';// 头部参数类classHeadBuilderParams{text:string|Resource;constructor(text:string|Resource){this.text=text;}}// 尾部参数类classFootBuilderParams{num:number|Resource;constructor(num:number|Resource){this.num=num;}}// 头部构建器@BuilderfunctionitemHead(params:HeadBuilderParams){Text(params.text).fontSize(20).height('48vp').width('100%').padding(10).backgroundColor($r('sys.color.background_tertiary'))}// 尾部构建器@BuilderfunctionitemFoot(params:FootBuilderParams){Text('共'+params.num.toString()+'节课').fontSize(20).height('48vp').width('100%').padding(10).backgroundColor($r('sys.color.background_tertiary'))}// 自定义分组组件@Componentstruct MyItemGroup{item:TimeTable={title:'',projects:[]};header?:ComponentContent<HeadBuilderParams>=undefined;footer?:ComponentContent<FootBuilderParams>=undefined;headerParam=newHeadBuilderParams(this.item.title);footerParam=newFootBuilderParams(this.item.projects.length);itemArr:ProjectsDataSource=newProjectsDataSource([]);aboutToAppear():void{this.header=newComponentContent(this.getUIContext(),wrapBuilder(itemHead),this.headerParam);this.footer=newComponentContent(this.getUIContext(),wrapBuilder(itemFoot),this.footerParam);this.itemArr=newProjectsDataSource(this.item.projects);}GetHeader(){this.header?.update(newHeadBuilderParams(this.item.title));returnthis.header;}GetFooter(){this.footer?.update(newFootBuilderParams(this.item.projects.length));returnthis.footer;}build(){// ListItemGroup 无需配置列数,自动适配父级List的lanesListItemGroup({headerComponent:this.GetHeader(),footerComponent:this.GetFooter()}){LazyForEach(this.itemArr,(project:string)=>{ListItem(){Column(){Text(project).fontSize(20).textAlign(TextAlign.Center)}.width('100%').height(80).padding(8).justifyContent(FlexAlign.Center).backgroundColor($r('sys.color.background_secondary')).borderRadius(12).shadow({radius:4,color:'#20000000',offsetX:0,offsetY:2})}},(item:string)=>item)}// 分组内分割线配置.divider({strokeWidth:2,color:$r('sys.color.background_tertiary'),startMargin:20,endMargin:20})}}// 主页面@Entry@Componentstruct ListItemGroupExample{itemGroupArray:TimeTableDataSource=newTimeTableDataSource([]);aboutToAppear():void{lettimeTable:TimeTable[]=[{title:'星期一',projects:['语文','数学','英语','物理','化学','生物']},{title:'星期二',projects:['历史','地理','政治','体育','美术','音乐']},{title:'星期三',projects:['计算机','编程','算法','数据结构','网络']},{title:'星期四',projects:['文学','写作','阅读','书法']},{title:'星期五',projects:['实验','生活','奥数','高数','中医']}];this.itemGroupArray=newTimeTableDataSource(timeTable);}build(){Column(){// 核心:List配置 lanes=3 实现3列布局List({space:15}){LazyForEach(this.itemGroupArray,(item:TimeTable)=>{MyItemGroup({item:item})},(item:TimeTable)=>item.title)}.lanes(3)// 多列布局核心配置.alignListItem(ListItemAlign.Center)// 子项居中对齐.layoutWeight(1).scrollBar(BarState.Auto).width('100%').margin(10)}.backgroundColor($r('sys.color.background_primary')).width('100%').height('100%').padding(10)}}

运行效果如图:

五、多列布局效果与规则

1. 界面展示效果

  1. Header/Footer:自动铺满整行,不参与多列排列,保持分组标题和统计信息完整展示;
  2. 子项布局:分组内所有ListItem自动分为3列,平均宽度,自适应排列;
  3. 分组隔离:不同ListItemGroup之间相互独立,各自按列展示子项,互不干扰;
  4. 样式适配:子项支持圆角、阴影、背景色等卡片样式,多列展示更美观。

2. 布局规则

  • 列数由List.lanes统一控制,所有分组共享列数配置;
  • 子项宽度 = List可用宽度 / 列数,自动计算;
  • 子项超出列数自动换行,纵向滚动;
  • Header/Footer永远独占一行,宽度100%。

总结

  1. List配置列数:在List上通过.lanes(数字)设置多列布局;
  2. 优化子项对齐:使用.alignListItem(ListItemAlign.Center)让子项居中展示;
  3. 编写分组组件:使用ListItemGroup包裹子项,配置Header/Footer;
  4. 子项样式适配:设置ListItem为自适应宽度、卡片样式,适配多列;
  5. 数据渲染:通过LazyForEach加载分组数据,完成多列分组布局。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力!

http://www.jsqmd.com/news/567512/

相关文章:

  • Sunshine:5步打造你的专属游戏串流服务器,随时随地畅玩PC大作
  • Lingbot 模型与 Dify 集成:构建无需编码的深度图生成 AI 应用
  • MoveIt!与Gazebo联调实战:手把手教你配置controllers_gazebo.yaml(附常见报错修复)
  • 从仿真到实车:解析Fast-LIO2定位中坐标系缺失的排查与修复
  • AI绘画新手指南:用FLUX.1和SDXL风格,轻松生成高质量图片
  • 程序员转型AI大模型全攻略:告别焦虑,抢占时代红利
  • Qwen3.5-2B轻量化部署:单卡3090上同时运行3个实例的资源分配方案
  • JavaScript 开发 - Object 的 hasOwn 方法
  • 3步构建稳定黑苹果:给硬件爱好者的OpenCore智能配置方案
  • 基于SpringBoot集成乙巳马年皇城大门春联生成终端W:打造企业级文化应用
  • 终极文件传输服务器SFTPGo:一站式解决企业级文件管理难题
  • 华为2288H V5服务器CentOS 7.5安装全记录:从BIOS密码到图形界面/最小化安装选择
  • 花卉智能分类实战:从数据预处理到模型部署
  • Qwen3智能字幕系统在网络安全领域的应用:音视频内容审计
  • Pixel Aurora Engine算力优化部署:混合精度推理降低推理延迟37%
  • Android 11+ 开发避坑:TextToSpeech报错‘speak failed: not bound to TTS engine’的完整排查与修复指南
  • UDOP-large文档理解模型实战:5步完成英文发票信息提取
  • 春联生成模型-中文-base实测:在Jetson Orin NX边缘设备上实时生成性能报告
  • 2026实测|6款好用的PPT生成工具,AI博主私藏,告别熬夜排版 - 品牌测评鉴赏家
  • AI博主实测|6款PPT生成工具,职场人/开发者速藏(2026最新版) - 品牌测评鉴赏家
  • Unity 2020.3.46 + Addressables实战:微信小游戏资源管理全流程(含本地CDN搭建)
  • Phi-4-mini-reasoning效果展示:自动补全缺失推理步骤,修复逻辑断点能力
  • Prompt工程避坑指南:从李继刚神模板到Fabric工具的高效写作秘诀
  • 无水印资源获取工具:重构数字内容管理的技术方案与实践指南
  • 2026隔油池性价比大评测,实力厂家电话曝光,隔油池/玻璃钢化粪池/化粪池/环保储水罐/混凝土化粪池,隔油池厂家推荐 - 品牌推荐师
  • Qwen2.5-14B-Instruct开源大模型实战:像素剧本圣殿8-Bit UI部署详解
  • 深圳大学生物学考研复试资料大全:真库、流程指南、英文自我介绍模板
  • AI工具实测|2026年,最强制作PPT的6款高效“搭子” - 品牌测评鉴赏家
  • RWKV7-1.5B-g1a部署教程:CSDN平台外网域名(gpu-guyeohq1so-7860)配置要点
  • FRCRN(单麦-16k)企业应用案例:呼叫中心录音质检前降噪提效40%