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

HarmonyOS6 ArkTS Grid 以当前行最高的GridItem的高度为其他GridItem的高度

文章目录

  • HarmonyOS6 ArkTS Grid 以当前行最高的GridItem的高度为其他GridItem的高度
    • 核心原理
    • 完整代码
    • 核心讲解
      • 1. 开启行高统一
      • 2. GridItem 必须不设置固定高度
      • 3. 内部自适应填充(flexGrow:1)
    • 总结

HarmonyOS6 ArkTS Grid 以当前行最高的GridItem的高度为其他GridItem的高度

核心原理

要实现Grid 行内高度统一,必须满足以下规则:

  1. Grid 设置 alignItems 为 GridItemAlignment.STRETCH
    这是开启“拉伸对齐”的核心配置。
  2. GridItem 不设置固定高度
    高度必须自适应,才能被拉伸到行最高高度。
  3. Grid 必须设置固定列数 columnsTemplate
    自适应列模式不支持该特性。

完整代码

// GridDataSource.etsexportclassGridDataSourceimplementsIDataSource{privatelist:string[]=[];privatelisteners:DataChangeListener[]=[];constructor(list:string[]){this.list=list;}totalCount():number{returnthis.list.length;}getData(index:number):string{returnthis.list[index];}registerDataChangeListener(listener:DataChangeListener):void{if(this.listeners.indexOf(listener)<0){this.listeners.push(listener);}}unregisterDataChangeListener(listener:DataChangeListener):void{constpos=this.listeners.indexOf(listener);if(pos>=0){this.listeners.splice(pos,1);}}// 通知控制器数据位置变化notifyDataMove(from:number,to:number):void{this.listeners.forEach(listener=>{listener.onDataMove(from,to);})}// 交换元素位置publicswapItem(from:number,to:number):void{lettemp:string=this.list[from];this.list[from]=this.list[to];this.list[to]=temp;this.notifyDataMove(from,to);}}@Entry@Componentstruct Index{data:GridDataSource=newGridDataSource([]);@Stateitems:number[]=[];aboutToAppear():void{letlist:string[]=[];for(leti=0;i<100;i++){list.push(i.toString());this.items.push(this.getSize());}this.data=newGridDataSource(list);}getSize(){letret=Math.floor(Math.random()*5);returnMath.max(1,ret);}build(){Column({space:10}){Text('Grid alignItems示例代码')Grid(){LazyForEach(this.data,(item:number)=>{// GridItem和Column不设置高度,默认会自适应子组件大小,设置STRETCH的场景下,会变成与当前行最高节点同高。// 若设置高度,则会保持已设置的高度,不会与当前行最高节点同高。GridItem(){Column(){Column().height(100).backgroundColor('#D5D5D5').width('100%')// 中间的Text设置flexGrow(1)来自适应填满父组件的空缺Text('这是一段文字。'.repeat(this.items[item])).flexGrow(1).width('100%').align(Alignment.TopStart).backgroundColor('#F7F7F7')Column().height(50).backgroundColor('#707070').width('100%')}}.border({color:Color.Black,width:1})})}.columnsGap(10).rowsGap(5).columnsTemplate('1fr 1fr').width('80%').height('100%')// Grid设置alignItems为STRETCH,以当前行最高的GridItem的高度为其他GridItem的高度。.alignItems(GridItemAlignment.STRETCH).scrollBar(BarState.Off)}.height('100%').width('100%')}}

运行效果如图:


核心讲解

1. 开启行高统一

.alignItems(GridItemAlignment.STRETCH)

作用:

  • Grid 会自动计算每一行中最高的 GridItem
  • 同一行其他所有 GridItem 高度自动拉伸到该高度
  • 每行独立计算,互不影响

2. GridItem 必须不设置固定高度

代码中明确注释:

// GridItem和Column不设置高度,默认会自适应子组件大小 // 设置STRETCH的场景下,会变成与当前行最高节点同高 // 若设置高度,则会保持已设置的高度,不会与当前行最高节点同高

规则:

  • 如果 GridItem 设置了固定 height → 不会拉伸
  • 如果 GridItem 高度自适应 → 会被拉伸为行最高高度

3. 内部自适应填充(flexGrow:1)

Text('...').flexGrow(1)

作用:

  • 当父容器被拉伸时,Text 自动填满剩余空间
  • 保证内容布局不会出现空白错位

总结

  1. GridItemAlignment.STRETCH必须设置
  2. GridItem 不能设置固定高度
  3. 必须设置columnsTemplate固定列数
  4. 每行独立计算最高高度并统一整行高度
  5. 内部可使用 flexGrow 填充剩余空间

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

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

相关文章:

  • Phi-3-mini-4k-instruct-gguf快速部署:7860端口网页服务+独立venv隔离环境实录
  • 深入I.MX RT1170 MIPI DSI显示框架:剖析LCDIFv2驱动层与影子寄存器机制
  • 别再只会双击打开了!Simulink模型文件的5种打开方式与隐藏技巧(2021b版)
  • d2s-editor:开源工具解决暗黑破坏神2存档管理难题的完整方案
  • Phi-3-mini-4k-instruct-gguf完整指南:模型路径校验+代理配置清理+镜像固化
  • 基于嵌入向量的智能检索!HOOPS AI 解锁 CAD 零件相似性搜索新方式
  • 讲讲蓝深集团盈利能力如何,产品性价比高吗在杭州地区 - myqiye
  • AI应用上线前必须验证的7类流式异常:断连重试失败、Token乱序、Content-Type错配、内存泄漏…FastAPI 2.0官方测试套件首次公开
  • CAPL脚本避坑指南:Signal Wait函数返回值处理与超时逻辑的5个常见错误
  • WindowResizer终极指南:3个简单步骤解决Windows窗口尺寸限制难题
  • STC89C52RC + HX711 + JQ8400-FL:手把手教你做一个能说话的5KG电子秤(附完整代码和PCB)
  • 如何在自己的ai编程agent添加沙箱环境
  • SenseVoice Small GPU推理参数详解:batch_size/VAD阈值/断句灵敏度调优
  • 海外仓库存数据怎么处理?库存数据不准确及账实不符解决方案! - 跨境小媛
  • Matlab R2024a硬件支持包安装避坑指南:以Arduino为例(附离线包下载)
  • 技术解析:Cursor Pro功能的激活方法与技术实现
  • 手机续航的秘密武器:深入拆解LPDDR4的低功耗特性(VDDQ/TCSR/PASR)
  • YOLOv8小目标检测不给力?试试这个ASF-YOLO特征融合魔改方案(附消融实验)
  • Qt实战:5分钟搞定LineEdit和TextEdit的回车发送功能(附完整代码)
  • Vue3 与第三方组件库联动:Element Plus 按需引入与二次封装
  • 编译原理(龙书):从理论到实践——解析编译器与解释器的核心差异
  • 实战演练:基于autoclaw利用快马平台快速开发可部署的任务管理看板
  • 漫画脸描述生成新手教程:零基础生成可商用二次元角色设计方案
  • Django DEBUG=False时如何安全查看错误详情?3种不暴露敏感信息的方法
  • 从零到一:基于Docker Compose构建ThinkPHP 8.1微服务化开发栈
  • 算力驱动智慧零售|腾视科技AI边缘算力盒子 —— 无人商超全场景解决方案重磅发布
  • 别再用if-else了!用状态机重构你的51单片机红外循迹小车代码(思路+代码对比)
  • 别再当‘黑盒’玩家了!用Grad-CAM给你的YOLOv5模型做个‘X光’检查(附完整代码)
  • HoRain云--RESTful API设计核心
  • 发动机阀系系统设计避坑指南:AVL-Excite中这10个元素配置最容易出错