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

从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程

一、线性布局(Row / Column)

方向语法糖适用
水平Row工具栏、按钮组
垂直Column表单、列表项
Column({ space: 8 }) {Text('用户名').fontSize(16)TextInput().placeholder('请输入')Button('登录')
}.width('100%').padding(16)

关键属性速记
justifyContent → 主轴对齐
alignItems → 交叉轴对齐
space → 相邻子组件间距


二、弹性布局(Flex)

一句话Flex = Row + Column + wrap + layoutWeight

Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }) {ForEach([1,2,3,4,5], () => {Text('标签').layoutWeight(1).margin(4)})
}
场景推荐值
等分layoutWeight(1)
拉齐尾部justifyContent: FlexAlign.SpaceBetween
换行wrap: FlexWrap.Wrap

三、层叠布局(Stack)

Stack({ alignContent: Alignment.BottomEnd }) {Image($r('app.media.bg'))FloatingActionButton()   // 悬浮按钮.margin(16)
}

zIndex 越大越靠上;支持 hitTestBehavior 控制事件穿透。


四、相对布局(RelativeContainer)

通过 9 个锚点(上/下/左/右/居中)精准定位:

RelativeContainer() {Text('A').id('A').alignRules({top: { anchor: '__container__', align: VerticalAlign.Top },left: { anchor: '__container__', align: HorizontalAlign.Start }})Text('B').id('B').alignRules({left: { anchor: 'A', align: HorizontalAlign.End },centerVertical: { anchor: 'A' }})
}

五、栅格布局(GridRow / GridCol)

12 栅格系统,断点自动切换:

GridRow({ gutter: 12 }) {ForEach(this.newsList, item =>GridCol({ span: { sm: 12, md: 6, lg: 4 } }) {NewsCard({ item })})
}
断点典型宽度列数
sm<520 vp12
md520-84012
lg>84012

span 取值 1-12,必须 父容器设置 columns: 12(默认即 12)。


六、网格布局(Grid)

适用于 固定行列 的棋盘、相册、九宫格:

Grid() {ForEach(this.imgList, img =>GridItem() {Image(img).objectFit(ImageFit.Cover)})
}
.columnsTemplate('1fr 1fr 1fr')
.rowsTemplate('1fr 1fr')
.columnsGap(8)
.rowsGap(8)

七、瀑布流布局(WaterFlow)

子项高度可变,自动填满空白;

WaterFlow() {LazyForEach(this.dataSource, item =>FlowItem() {ProductCard({ item })})
}
.columnsGap(12)
.rowsGap(12)
.columnsTemplate('1fr 1fr')   // 两列

八、列表布局(List)

长列表首选,支持懒加载 + 滑动事件:

List({ lanes: { sm: 1, md: 2, lg: 3 } }) {LazyForEach(this.dataSource, item =>ListItem() {ArticleRow({ item })})
}
.onScrollIndex(start => console.log('开始索引:' + start))

九、轮播布局(Swiper)

Swiper() {ForEach(this.banners, banner =>Image(banner.url).borderRadius(12))
}
.autoPlay(true)
.interval(3000)
.indicator(true)
.displayCount({ sm: 1, md: 2, lg: 3 })   // 响应式

十、页签布局(Tabs)

底部、顶部、侧边一键切换

Tabs({ barPosition: BarPosition.End }) {TabContent() { HomePage() }.tabBar('首页')TabContent() { ProfilePage() }.tabBar('我的')
}
.vertical(false)          // true=侧边
.scrollable(true)         // 支持手势滑动

十一、抽屉布局(SideBarContainer)

官方抽屉,零代码手势

SideBarContainer(SideBarContainerType.Embed) {Column() { /* 抽屉内容 */ }.width(240)
}
.controlButton({top: 24,left: 24,icons: {shown: $r('app.media.menu'),hidden: $r('app.media.close')}
})

十二、导航布局(Navigation)

单/双/三分栏一站式导航,自动适配折叠屏

Navigation() {NavRouter() {Text('一级')NavDestination() { DetailPage() }}
}
.mode(NavigationMode.Auto)   // Auto=根据宽度自动分栏

十三、原子布局(DisplayPriority & PriorityLayout)

空间不足时按优先级隐藏:

Row() {Text('必须').displayPriority(2)Text('可隐藏').displayPriority(1)
}

优先级 越大被隐藏;默认 0 表示不隐藏。


十四、响应式布局 2×2 简化断点

状态阈值目录名
横向 Compact<600 vphC
横向 Regular≥600 vphR
纵向 Compact<800 vpvC
纵向 Regular≥800 vpvR

十五、常见错误 10 秒定位表

现象根因1 行解决
栅格 span 无效父容器未 columns:12GridRow({columns:12})
layoutWeight 无效父容器无主轴尺寸Row/Column 显式 width/height
图片溢出objectFit.objectFit(ImageFit.Cover)
断点监听无回调responsiveWindowmodule.json5 里开启
通知不显示缺权限动态申请 ohos.permission.NOTIFICATION

文章转载自:

http://m8i1gzSE.hmktd.cn
http://OOPaCbmL.hmktd.cn
http://F5JXdNwp.hmktd.cn
http://d4TavsaK.hmktd.cn
http://GBltd4AB.hmktd.cn
http://VT1h8uqX.hmktd.cn
http://4YREklvj.hmktd.cn
http://Qbe6EEnW.hmktd.cn
http://KnkD6BBt.hmktd.cn
http://P31rcc00.hmktd.cn
http://adAgTpLO.hmktd.cn
http://AoO9AJCr.hmktd.cn
http://lmPReqQk.hmktd.cn
http://U4VsCrAQ.hmktd.cn
http://YHLyqTVU.hmktd.cn
http://UeqXTnP3.hmktd.cn
http://qeT71lHB.hmktd.cn
http://pAO2ejcv.hmktd.cn
http://atqXBp2t.hmktd.cn
http://kvf5cVDH.hmktd.cn
http://mo6q6AD9.hmktd.cn
http://zOHrocOF.hmktd.cn
http://FYpo4xBj.hmktd.cn
http://FEuJS1uK.hmktd.cn
http://JhtXeyFC.hmktd.cn
http://OdXgiMpO.hmktd.cn
http://G8xSd7XR.hmktd.cn
http://mgILM3Q7.hmktd.cn
http://m3Dqc68Q.hmktd.cn
http://9FbQgt4M.hmktd.cn
http://www.dtcms.com/a/374993.html

相关文章:

  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型
  • ElasticSearch复习指南:从零搭建一个商品搜索案例
  • 宋红康 JVM 笔记 Day15|垃圾回收相关算法
  • 【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
  • 【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)
  • 前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
  • 算法题(203):矩阵最小路径和
  • 强化学习在复杂调度问题中的常见陷阱与改进思路
  • AI基础设施——NVIDIA GB300 NVL72
  • 实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
  • 第一章 神经网络的复习