Flex弹性布局
【摘要】 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是以弹性方式布局子组件的容器组件,提供更加有效的方式对容器内的子元素进行排列、对齐和分配剩余空间。
-
Flex布局相关概念
Flex可以认为是一个放置子组件的容器
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)
-
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
仅当父组件是 Flex、Column、Row、GridRow(仅针对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
子组件在父容器交叉轴的对齐格式,会覆盖Flex、Column、Row、GridRow布局容器中的alignItems设置。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)