Harmony 应用开发常用布局介绍
在 Harmony 应用开发中,合理的布局是构建美观且易用界面的关键。以下是几种常用的布局方式。
- Column 布局
- 特点:Column 是一种垂直方向的线性布局容器。它将子组件按照从上到下的顺序依次排列。
- 示例代码:
Column({ space: 5 }) { Text("Column") Button('Button 1') Button('Button 2') }.width('90%') .borderRadius(16) .borderColor(Color.Red) .borderWidth(2) .padding(10)
- Row 布局
- 特点:与 Column 相反,Row 是水平方向的线性布局。子组件在水平方向上从左到右排列。
- 示例代码:
Row({ space: 5 }) { Text("Row") ForEach(this.list, (index: number) => { Button('Button' + index) }) }.width('100%') .borderRadius(16) .borderColor(Color.Red) .borderWidth(2) .padding(10)
- Stack 布局
- 特点:Stack 布局允许子组件按照堆叠的方式排列。后添加的子组件会覆盖前面的子组件,可以通过设置 z - index 等属性来控制显示顺序。
- 示例代码:
Stack({ alignContent: Alignment.Center }) { Image($r('app.media.app_icon')) .width('100%').height('100%') .objectFit(ImageFit.Contain) Stack({ alignContent: Alignment.BottomEnd }) { Image($r('app.media.app_icon')).height(30).width(30) }.width('100%').height('100%') Image($r('app.media.app_icon')).height(30).width(30).align(Alignment.BottomEnd) Stack({ alignContent: Alignment.TopStart }) { Text("Stack").fontSize(30).fontColor(Color.Red) }.width('100%').height('100%') }.width('90%') .height(200) .borderRadius(16) .borderColor(Color.Red) .borderWidth(2) .padding(10)
- Flex 布局
- 特点:Flex 布局是一种更灵活的布局方式,它可以在水平和垂直方向上排列子组件,并且可以方便地设置对齐方式、伸缩比例等。
- 示例代码(水平方向的 Flex 布局示例):
Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center, alignContent: FlexAlign.Center, }) { Text("Flex") ForEach(this.list, (index: number) => { Button('Button' + index).margin({ bottom: 5 }) }) }.width('90%') .borderRadius(16) .borderColor(Color.Red) .borderWidth(2) .padding(10)
- RelativeContainer 布局
- 特点:RelativeContainer 为采用相对布局的容器,支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。
RelativeContainer() { Text("RelativeContainer").alignRules({ 'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start}, 'top': { 'anchor': '__container__', 'align': VerticalAlign.Top} }) Image($r('app.media.watchGT4')).width(50).height(50).borderRadius(25) .alignRules({ 'left': { 'anchor': '__container__', 'align': HorizontalAlign.Start}, 'top': { 'anchor': '__container__', 'align': VerticalAlign.Top}, 'bottom': { 'anchor': '__container__', 'align': VerticalAlign.Bottom}, }).margin({left:15}).id("avatar") Text("Name").alignRules({ 'left': { 'anchor': 'avatar', 'align': HorizontalAlign.End}, 'top': { 'anchor': 'avatar', 'align': VerticalAlign.Top}, 'bottom':{ 'anchor': 'avatar', 'align': VerticalAlign.Bottom} }).margin({left:10}) Button("关注").height(40).alignRules({ 'top': { 'anchor': '__container__', 'align': VerticalAlign.Top}, 'bottom': { 'anchor': '__container__', 'align': VerticalAlign.Bottom}, 'right': { 'anchor': '__container__', 'align': HorizontalAlign.End}, }).margin({right:15}) } .width('90%') .height(100) .borderRadius(16) .borderColor(Color.Red) .borderWidth(2) .padding(10)
- Grid 布局
- 特点:Grid 布局是一种多列布局方式,它将屏幕分为多列,子组件按照指定的行数和列数进行排列。
- 示例代码(Grid 布局示例):
GridRow({ breakpoints: { value: ['200vp', '300vp', '400vp', '500vp', '600vp'], reference: BreakpointsReference.WindowSize }, columns: 60 // 共 60 列 }) { ForEach(this.bgColors, (color: Color, index?: number | undefined) => { GridCol({ span: { xs: 60, // 在最小宽度类型设备上,显示 1 项。 sm: 30, // 在小宽度类型设备上,显示 2 项。 md: 20, // 在中等宽度类型设备上,显示 3 项。 lg: 15, // 在大宽度类型设备上,显示 4 项。 xl: 12, // 在特大宽度类型设备上,显示 5 项。 xxl: 10 // 在超大宽度类型设备上,显示 6 项。 } }) { Row() { Text(`${index}`) }.width("100%").height('50vp') }.backgroundColor(color) }) }.margin({left:15, right:15})
通过熟练掌握这些常用的布局方式,开发者可以高效地构建出符合设计要求的 Harmony 应用界面,为用户提供优质的交互体验。同时,参考官网文档中的详细说明和更多示例,可以进一步深入理解和优化布局设计。
本文由博客一文多发平台 OpenWrite 发布!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
维度爆炸背景下uv计算在Feed业务的高效实践
导读 本文介绍了优化大数据计算中多维度用户数统计的方法,通过数据打标的方式避免数据膨胀,提高性能并减少计算成本。首先分析了大数据计算中遇到的多维度数据统计问题,然后提出了利用数据打标进行处理的解决方案,详细阐述了优化方案的实施步骤和效果。通过对比实验结果,验证了优化方案在提升性能和降低成本方面的显著效果。最后,总结了优化方案的优势和适用场景。 01 背景 Feed是百度App的一个重要业务组成部分,日均DAU(活跃用户数)规模在亿级别。在做数据分析和统计的时候,常常需要从不同日志维度去看对应的用户数。由于用户数不同维度不可累加的特性,基本上所有维度的用户数都需要单独计算,维度少的时候可以直接 count(distinct xx) 计算,维度多的话这种计算就相当痛苦了。 一个典型的场景如下:业务方需要从产品线、付费类型、资源类型、频道类型、页面类型等维度来看Feed的消费用户数。除了计算各个维度组合的用户数外,每个维度还需要看到整体的用户数。所需的结果数据表格如下(其中维度与指标均为虚构): 02 通用实现方式 常见的实现方式是直接计算,单独计算每个维度的用户数指标。 将原始数据按 cu...
- 下一篇
GodoOS 开源版 V1.0.2 正式发布
GodoOS开源版v1.0.2更新日志 新增本地文件加密存储 新增企业端接口(聊天/工作流/文件分享/文件加密) 重构本地聊天,修改发现机制(基于ip扫描和arp过滤) 本地聊天可批量发送图片/文件夹,修改发送机制,消息基于udp发送,文件基于tcp发送 修复word导入格式丢失问题 修复文件重命名错误的bug 修复拖拽上传中断的bug 新增可手动关闭广告 优化初始化系统,初始化系统时只请求读写一次 去除浏览器存储 开源核心底层源码 优化思维导图和文件读取 📥 下载安装(v1.0.2) 💻 Windows 用户: Windows (AMD64) Web版 桌面版 Windows (ARM64) Web版 桌面版 💼 MacOS 用户: MacOS (AMD64) Web版 MacOS (ARM64) Web版 提示:下载后以godoos_web_darwin_amd64为例,命令行: sudo chmod +x godoos_web_darwin_amd64 sudo ./godoos_web_darwin_amd64 💽 Linux 用户: Linux (AMD64)...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启