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

    文章

    7

    浏览量

    9550
  • OpenHarmony
    +关注

    关注

    23

    文章

    3260

    浏览量

    15159

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

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

收藏 人收藏

    评论

    相关推荐

    OpenHarmony南向能力征集令

    1、适配过程缺少哪些接口能力或者南向能力,需要OpenHarmony去补齐的?例如内核、编译、器件适配、单板适配等; 2、对标linux,需要OpenHarmony提供哪些能力?比如V4L2
    发表于 04-09 15:32

    鸿蒙开发实战-(ArkUI)List组件和Grid组件的使用

    简介 Grid组件为网格容器,是一种网格列表,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局Grid组件一般和子组件GridItem一起使用,Grid
    发表于 01-18 20:18

    开鸿智谷亮相OpenHarmony Meetup深圳站!

    开源项目OpenHarmony是每个人的OpenHarmonyOpenHarmony正当时”OpenHarmonyMeetup2023城市巡回活动,旨在通过meetup线下交流形式,
    的头像 发表于 10-18 08:30 416次阅读
    开鸿智谷亮相<b class='flag-5'>OpenHarmony</b> Meetup深圳站!

    Rigid-Flex的多层叠该如何设计呢?

    Rigid-Flex刚柔电路的三大特征是 Multi-bending(多弯曲),Multi-stackup(多层叠),Multi-zone(多区域)。
    的头像 发表于 10-07 17:17 971次阅读
    Rigid-<b class='flag-5'>Flex</b>的多层叠该如何设计呢?

    OpenHarmony应用开发涉及的主要因素与UX设计规范

    一、OpenHarmony应用开发涉及的主要因素 二、OpenHarmony应用开发UX设计规范 UX设计规范的主要内容与部分图标示例 2.OpenHarmony应用设计原则 设计原则,当为
    发表于 09-25 15:03

    OpenHarmony ArkTS工程目录结构(Stage模型)

    :当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。其中targets可配置当前运行环境,默认为HarmonyOS。若需开发OpenHarmony应用,则需开发者
    发表于 09-18 15:23

    Qt For OpenHarmony

    OpenHarmony Touch事件接入:基于XComponent的事件监控回调,在QPA的InputContext实现实现对XComponent的输入监控,将监控的输入转换为Qt Event发送到
    发表于 09-15 15:39

    DevEco Studio如何设置HarmonyOS/OpenHarmony应用开发

    信息配置项,包括buildOption、targets配置等。其中targets可配置当前运行环境,默认为HarmonyOS。若需开发OpenHarmony应用,则需开发者自行修改
    发表于 09-14 14:50

    Flex Bus物理层的CXL帧和数据概述

    在传输端,Flex Bus物理层准备从PCIe链路层或CXL ARB/MUX接收的数据,以便通过Flex Bus链路进行传输。
    的头像 发表于 09-11 14:34 1822次阅读
    <b class='flag-5'>Flex</b> Bus物理层的CXL帧和数据概述

    OpenHarmony使用ArkUI Inspector分析布局

    本文转载自《#2023 盲盒+码 # OpenHarmony使用ArkUI Inspector分析布局》,作者:zhushangyuan_ ● 摘要:视图的嵌套层次会影响应用的性能,开发者应该移除
    发表于 09-04 15:27

    OpenHarmony应用开发入门与基础课程_第五章-保存应用数据 _页面布局介绍

    数据开发OpenHarmony
    OpenHarmony开发者
    发布于 :2023年08月22日 16:52:08

    HarmonyOS/OpenHarmony应用开发-ArkTSAPI组件总体分类与说明(上)

    用。 Grid 网格容器组件,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。 GridItem 网格容器单项内容容器。 滚动与滑动 Scroll 可滚动的容器组件
    发表于 08-15 11:14

    OpenHarmony轻量系统书籍推荐《OpenHarmony轻量设备开发理论与实战》

    最近大家问的智能家居套件方面有没有可以参考的资料,这里给大家统一回复一下 推荐大家可以看这本书 《OpenHarmony轻量设备开发理论与实战》 本书系统地讲授OpenHarmony 轻量系统 设备
    的头像 发表于 07-20 12:43 664次阅读

    使用Infra Grid进行硬件无创热监测

    电子发烧友网站提供《使用Infra Grid进行硬件无创热监测.zip》资料免费下载
    发表于 06-16 09:54 0次下载
    使用Infra <b class='flag-5'>Grid</b>进行硬件无创热监测

    一文解读刚柔电路Rigid-Flex三大特征

    刚柔电路 Rigid-Flex Printed Circuit Board可以简称为Rigid-Flex,是单一电路板上既包含刚性基板也包含柔性电路的一种电路结构形式。
    的头像 发表于 05-05 18:21 1654次阅读
    一文解读刚柔电路Rigid-<b class='flag-5'>Flex</b>三大特征