0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Openharmony中的Flex和Grid布局

OpenHarmony技术社区 来源:OpenHarmony技术社区 作者:韩祥 2022-04-26 10:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Flex 布局

Flex 布局是很常用也是很方便的一种布局模式,此种布局方式已经广泛使用在前端、小程序开发之中。

如果之前已经学习过 Flex 布局,那么在 Openharmony 中也是大同小异的。

用法如下:

容器的常用参数:

  • direction:子组件在 Flex 容器上排列的方向,即主轴的方向。

  • wrap:Flex 容器是单行/列还是多行/列排列。

  • justifyContent:子组件在 Flex 容器主轴上的对齐格式。

  • alignItems:子组件在 Flex 容器交叉轴上的对齐格式。

  • alignContent:交叉轴中有额外的空间时,多行内容的对齐方式。仅在 wrap 为 Wrap 或 WrapReverse 下生效。

子组件常用属性(不是所有属性):flexGrow:Flex 容器的剩余空间分配给给此属性所在的组件的比例。

简单的使用:Flex 布局的属性有很多,但是最常用的还是让子组件垂直水平居中,两条属性即可保证子组件垂直水平居中:

Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){
Text('水平垂直居中显示').fontSize(18)
}.width('100%').height('100%')

Flex 也可用于很多常见布局场景,如下图效果:

078ba7be-c481-11ec-bce3-dac502259ad0.png

利用 direction 属性和 flexGrow 配合即可轻松达到上面的布局效果,核心代码段如下:

Flex({direction:FlexDirection.Column}){
Column(){
ForEach(this.ListData,(item)=>{
Text(item).fontSize(18).height(100).width('100%').margin({bottom:5}).backgroundColor('#575da8')
},item=>item)
}.flexGrow(1).backgroundColor('#08ec89').margin({bottom:2}).padding(10)
Flex({alignItems:ItemAlign.Center}){
ForEach(this.navData,(item)=>{
Text(item).fontSize(18).height('100%').flexGrow(1).textAlign(TextAlign.Center).backgroundColor("#18ec08").margin(1)
},item=>item)
}.height(64)
}.width('100%').height('100%')

Flex 还有一个常用的属性是 wrap,可以去配置换行,不过如果是多行建议还是使用 Grid 布局,更加灵活,下面看看 Grid 布局。

Grid 布局

Grid 做前端的同学应该都很熟悉了,翻译成中文为“栅格” , 它将页面划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。

用法如下:

基本概念:网格布局的区域,称为“容器”,容器内部采用网格定位的子元素,称为"项目"。

项目必须使用 Grid 子组件 GridItem 子组件包裹,即 Grid 的子组件必须是 GridItem。

容器属性:

  • columnsTemplate
  • rowsTemplate

这两个属性用于设置当前网格布局的行和列的数量,不设置时默认 1 列行或者 1 列。

可以采用 fr 关键字表示各行和列的比例关系, 以列为例:‘1fr 1fr 2fr’ 将父组件等分为 4 等份,第一列第二列各占 1 份,第三列占两份:

07963cd8-c481-11ec-bce3-dac502259ad0.png

核心代码如下:

@StateNumber:String[]=['0','1','2']
build(){
Grid(){
ForEach(this.Number,(item:string)=>{
ForEach(this.Number,(item:string)=>{
GridItem(){
Text(item)
.fontSize(16)
.backgroundColor(Color.Grey)
.width('100%')
.height('100%')
.textAlign(TextAlign.Center)
}.borderWidth(1)
},item=>item)
},item=>item)
}
.columnsTemplate('1fr1fr2fr')
.rowsTemplate('1fr1fr2fr')
.backgroundColor(Color.Black)
.height(300)
}

这两个属性里面也可使用 px 单位,如将 columnsTemplate 修改:

.columnsTemplate('100px1fr1fr')

展示效果如下:

07aa671c-c481-11ec-bce3-dac502259ad0.pngcolumnsGap 和 rowsGap:这两个属性可以设置行列之间的间距,此处不在赘述。

layoutDirection:LayoutDirection.Row 和 LayoutDirection.Column,不过尝试过后两种值的结果都是按列排布,默认不给属性的话是按行排布,这里应是没有完全支持。

其他属性:看到文档还提供了很多属性,但目前尝试过后没有效果,未支持。

事件:

onScrollIndex(first:number)=>void

当前列表显示的起始位置发生变化会触发这个事件,若要展示效果,则需使布局出现滚动条,可以去掉 rowsTemplate 属性,然后在子组件内部设置高度,然后再添加事件监听:

Grid(){
ForEach(this.Number,(item:string)=>{
ForEach(this.Number,(item:string)=>{
GridItem(){
Text(item)
.fontSize(16)
.backgroundColor(Color.Grey)
.width('100%')
.height(80)
.textAlign(TextAlign.Center)
}
},item=>item)
},item=>item)
}
.columnsTemplate('1fr1fr1fr1fr1fr')
.columnsGap(10)
.rowsGap(10)
.onScrollIndex((first:number)=>{
console.log(first.toString())
})
.backgroundColor(Color.Black)
.height(300)

总结

Grid 布局与 Flex 有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。

Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。

Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。

其实掌握这两种布局方式,页面上面大部分效果都是可以做出来的。当然,当前 Gird 布局还有很多属性是不支持的,相比较与传统的前端 Grid 布局功能上有很多不足,期待 API 更新,完善功能。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Grid
    +关注

    关注

    0

    文章

    9

    浏览量

    10331
  • OpenHarmony
    +关注

    关注

    33

    文章

    3974

    浏览量

    21348

原文标题:Openharmony中的Flex和Grid布局

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    #OpenHarmony HDC调试

    OpenHarmony
    视美泰
    发布于 :2026年01月16日 09:46:28

    #OpenHarmony 开发环境准备

    OpenHarmony
    视美泰
    发布于 :2026年01月16日 09:44:31

    #OpenHarmony 镜像烧录

    OpenHarmony
    视美泰
    发布于 :2026年01月16日 09:42:36

    #OpenHarmony 系统概述

    OpenHarmony
    视美泰
    发布于 :2026年01月16日 09:39:20

    #OpenHarmony Hello World应用以及部署

    OpenHarmony
    视美泰
    发布于 :2026年01月16日 09:32:52

    OpenHarmony系统】本期视频将为您介绍怎样将镜像烧录到板卡

    OpenHarmony
    视美泰
    发布于 :2026年01月15日 14:29:55

    Flex Power Modules将产品制造扩展至欧洲

    Flex Power Modules已将其产品制造扩展到欧洲,在奥地利阿尔特霍芬的Flex工厂设立新的生产基地。此举将提高Flex Power Modules的电源模块产能,助力其更快速、更高效地响应AI数据中心客户快速增长的需
    的头像 发表于 12-16 13:51 818次阅读

    Molex Premo-Flex FFC跳线电缆技术解析与应用指南

    Premo-Flex FFC 0.30mm脚距跳线电缆的锁定孔可在高冲击和高振动环境具有出色的保持力。该系列提供各种电缆长度、电路计数和交错设计,适用于空间受限的应用。
    的头像 发表于 11-20 15:12 665次阅读

    【HarmonyOS 5】鸿蒙中常见的标题栏布局方案

    是返回按钮,右边是问号帮助按钮,中间是标题文字。 那有几种布局方式,分别怎么布局呢?常见的思维是,有老铁使用row去布局,怎么都对不齐。 二、解决方案 方案一,使用Flex
    的头像 发表于 07-11 18:30 995次阅读
    【HarmonyOS 5】鸿蒙中常见的标题栏<b class='flag-5'>布局</b>方案

    HarmonyOS NEXT应用元服务布局优化精简节点数

    复制 共15个节点,并且其中并没有冗余的嵌套节点。而扁平化布局是一种让页面结构变浅变宽的方式,通过一些高级组件如RelativeContainer、Grid等容器,可以让元素在平面上展开。这种布局方式
    发表于 06-26 10:21

    网格布局介绍

    ,且Grid不可滚动。(推荐使用该种布局方式) 只设置行、列数量与占比的一个:元素按照设置的方向进行排布,超出的元素可通过滚动的方式展示。 行列数量与占比都不设置:元素在布局方向上排
    发表于 06-25 06:27

    HarmonyOS NEXT应用元服务布局合理使用布局组件

    布的组件是按照特定的方向线性放置,如横向/纵向/Z序方向。除上述布局类型外,还有一些复杂布局能力,如Flex、List、Grid、RelativeContainer和自定义
    发表于 06-20 15:48

    鸿蒙5开发宝藏案例分享---Grid性能优化案例

    注意到。今天我就带大家拆解这个案例,加上详细讲解和代码分析,帮你轻松提升应用流畅度! ?问题场景:为什么Grid会卡? 当Grid布局需要实现 不规则网格 (比如合并单元格)时,我们常用<
    发表于 06-12 17:47

    弹性布局 (Flex) 提供更加有效的方式对容器的子元素进行排列、对齐和分配剩余空间

    弹性布局 (Flex) 弹性布局Flex)提供更加有效的方式对容器的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布
    发表于 04-30 07:54

    层叠布局 (Stack):Stack组件为容器组件,容器内可包含各种子元素

    层叠布局 (Stack) 层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件的元素,提供元素可以重叠的布局。层叠布局
    发表于 04-30 07:51