Flex弹性布局

举报
tea_year 发表于 2025/06/13 16:59:30 2025/06/13
【摘要】 Flex弹性布局茶窝网: https://www.chawo.com/wap/#/淘小说: https://m.taoyuewenhua.com/?ctype=2Flex布局是什么?Flex是Flexible Box的缩写,意为”弹性布局”,是一种用于按行或按列布局元素的一维布局方法,可以为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。flex布局默认有两条轴,水平的主轴和...
Flex弹性布局

茶窝网: https://www.chawo.com/wap/#/
淘小说: https://m.taoyuewenhua.com/?ctype=2

Flex布局是什么?

Flex是Flexible Box的缩写,意为”弹性布局”,是一种用于按行或按列布局元素的一维布局方法,可以为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。

flex布局默认有两条轴,水平的主轴和垂直的交叉轴 :

Flex是以弹性方式布局子组件的容器组件,提供更加有效的方式对容器内的子元素进行排列、对齐和分配剩余空间。
  1. Flex布局相关概念

Flex可以认为是一个放置子组件的容器
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)
  1. Flex常用选项

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-container-flex-V13
import {LengthMetrics} from '@kit.ArkUI';

...
Flex({
  // 子组件在Flex容器上排列的方向,即主轴的方向
  // direction:FlexDirection.Row,  
  //direction:FlexDirection.Column,
  direction:FlexDirection.RowReverse,
  //设置是否换行
  wrap: FlexWrap.Wrap,
  //所有子组件在Flex容器主轴上的对齐格式
  justifyContent: FlexAlign.Start,
  // 所有子组件在Flex容器交叉轴上的对齐格式,只针对单行
  alignItems: ItemAlign.Auto,
  // 交叉轴中有额外的空间时,多行内容的对齐方式
  alignContent: FlexAlign.Start,
  // 所有子组件在Flex容器主轴或交叉轴的间距
  space: {
      main: LengthMetrics.px(50),
      cross: LengthMetrics.px(50)
  }
}){
    Flex子组件
}
名称 类型 必填 说明
direction FlexDirection 子组件在Flex容器上排列的方向,即主轴的方向。默认值: FlexDirection.Row卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。
wrap FlexWrap Flex容器是单行/列还是多行/列排列。默认值: FlexWrap.NoWrap说明:在多行布局时,通过交叉轴方向,确认新行堆叠方向。卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。
justifyContent FlexAlign 所有子组件在Flex容器主轴上的对齐格式。默认值: FlexAlign.Start卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。
alignItems ItemAlign 所有子组件在Flex容器交叉轴上的对齐格式。默认值: ItemAlign.Start卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。
alignContent FlexAlign 交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效。默认值: FlexAlign.Start卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。
space12+ FlexSpaceOptions12+ 所有子组件在Flex容器主轴或交叉轴的间距。默认值: {main:LengthMetrics.px(0), cross:LengthMetrics.px(0)}space为负数、百分比或者justifyContent设置为FlexAlign.SpaceBetween、FlexAlign.SpaceAround、FlexAlign.SpaceEvenly时不生效。元服务API: 从API version 12开始,该接口支持在元服务中使用。

Flex布局通用属性

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-flex-layout-V5#alignself
仅当父组件是 FlexColumnRowGridRow(仅针对alignSelf)时生效。
以下这些属性应用于Flex布局的子组件

flexBasis

设置组件在父容器主轴方向上的基准尺寸。
flexBasis和宽度高度的设置等价,表示组件原来的尺寸
Flex() {
  Text('flexBasis(100)')
    .flexBasis(100) // 这里表示宽度为100vp
    .height(100)
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
  Text(`flexBasis('auto')`)
    .flexBasis('auto') // 这里表示宽度保持原本设置的60%的宽度
    .width('60%')
    .height(100)
    .backgroundColor(0xD2B48C)
    .textAlign(TextAlign.Center)
}.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)

flexGrow

设置父容器在主轴方向上的剩余空间分配给此属性所在组件的比例。
  • 在容器有剩余空间时起作用
  • 规则是:Flex容器减去所有子组件的宽度总和后的剩余空间,再按份数分配给子组件
  • 会出现子组件比原来宽度增加
//下面的案例中,如果两个子组件都没有设置宽度,则第一个占2份,第2个占1份
// 如果设置宽度,则Flex容器减去两个子组件的宽度总和后的剩余空间,再按份数分配给子组件
Flex() {
  Text('flexGrow(2)')
    .flexGrow(2) // 父容器分配给该Text的宽度为剩余宽度的2/3
    // .width(50)
    .height(100)
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
  Text('flexGrow(1)')
    .flexGrow(1) // 父容器分配给该Text的宽度为剩余宽度的1/3
    .height(100)
    .backgroundColor(0xD2B48C)
    .textAlign(TextAlign.Center)
}.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)

flexShrink

设置父容器压缩尺寸分配给此属性所在组件的比例。
  • 在容器有空间不足时起作用
  • 规则是:所有子组件的宽度总和减去Flex容器的宽度,再按份数分配给子组件去减少
  • 会出现子组件比原来宽度减少
// flexShrink()表示该元素的压缩比例,基于超出的总尺寸进行计算
// 第一个text压缩比例是0,另外两个都是1,因此放不下时等比例压缩后两个,第一个不压缩
Flex({ direction: FlexDirection.Row }) {
  Text('flexShrink(0)')
    .flexShrink(0)
    .width('50%')
    .height(100)
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
  Text('default flexShrink') // 默认值为1
    .width('40%')
    .height(100)
    .backgroundColor(0xD2B48C)
    .textAlign(TextAlign.Center)
  Text('flexShrink(1)')
    .flexShrink(1)
    .width('40%')
    .height(100)
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
}.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)
// alignSelf会覆盖Flex布局容器中的alignItems设置
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
  Text('no alignSelf,height:70')
    .width('33%')
    .height(70)
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
  Text('alignSelf End')
    .alignSelf(ItemAlign.End)
    .width('33%')
    .height(70)
    .backgroundColor(0xD2B48C)
    .textAlign(TextAlign.Center)
  Text('no alignSelf,height:100%')
    .width('34%')
    .height('100%')
    .backgroundColor(0xF5DEB3)
    .textAlign(TextAlign.Center)
}.width('90%').height(120).padding(10).backgroundColor(0xAFEEEE)

alignSelf

子组件在父容器交叉轴的对齐格式,会覆盖FlexColumnRowGridRow布局容器中的alignItems设置。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。