线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row
和Column
构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。
Row
容器内子元素按照水平方向排列,通过 space
属性设置排列方向上子元素的间距。
@Entry
@Component
struct RowLayout {
build() {
Row({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
}
}
在布局容器内,可以通过justifyContent
属性设置子元素在容器主轴上的排列方式。Row
容器的主轴是水平方向的。
@Entry
@Component
struct RowLayout {
build() {
Row() {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Row容器宽,则Row容器的宽是子元素宽的总和
.width("100%")
.justifyContent(FlexAlign.SpaceBetween)
}
}
@Entry
@Component
struct RowLayout {
build() {
Row() {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Row容器宽,则Row容器的宽是子元素宽的总和
.width("100%")
.justifyContent(FlexAlign.SpaceAround)
}
}
@Entry
@Component
struct RowLayout {
build() {
Row() {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Row容器宽,则Row容器的宽是子元素宽的总和
.width("100%")
.justifyContent(FlexAlign.SpaceEvenly)
}
}
交叉轴是垂直于主轴的,因为
Row
容器的主轴是水平方向的,所以Row
容器的交叉轴是垂直方向的。
在布局容器内,可以通过alignItems
属性设置子元素在容器交叉轴上的对齐方式。
@Entry
@Component
struct RowLayout {
build() {
Row() {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Row容器宽,则Row容器的宽是子元素宽的总和
.width("100%")
// 不设置Row容器高,则Row容器的高等于子元素的高
.height("100%")
.justifyContent(FlexAlign.SpaceEvenly)
.alignItems(VerticalAlign.Center)
}
}
除了通过alignItems
属性控制所有子元素在容器交叉轴上的对齐方式外,alignSelf
属性用于控制单个子元素在容器交叉轴上的对齐方式,其优先级高于alignItems
属性。
@Entry
@Component
struct RowLayout {
build() {
Row() {
Button("第一按钮")
.alignSelf(ItemAlign.Stretch)
Button("第二按钮")
.alignSelf(ItemAlign.Start)
Button("第三按钮")
}
// 不设置Row容器宽,则Row容器的宽是子元素宽的总和
.width("100%")
// 不设置Row容器高,则Row容器的高等于子元素的高
.height("100%")
.justifyContent(FlexAlign.SpaceEvenly)
.alignItems(VerticalAlign.Center)
}
}
Column
容器内子元素按照垂直方向排列,通过 space
属性设置排列方向上子元素的间距。
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
}
}
在布局容器内,可以通过justifyContent
属性设置子元素在容器主轴上的排列方式。Column
容器的主轴是垂直方向的。
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Column容器高,则Column容器的高是子元素高的总和
.height("100%")
.justifyContent(FlexAlign.SpaceBetween)
}
}
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Column容器高,则Column容器的高是子元素高的总和
.height("100%")
.justifyContent(FlexAlign.SpaceAround)
}
}
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Column容器高,则Column容器的高是子元素高的总和
.height("100%")
.justifyContent(FlexAlign.SpaceEvenly)
}
}
交叉轴是垂直于主轴的,因为
Column
容器的主轴是垂直方向的,所以Column
容器的交叉轴是水平方向的。
在布局容器内,可以通过alignItems
属性设置子元素在容器交叉轴上的对齐方式。
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
Button("第二按钮")
Button("第三按钮")
}
// 不设置Column容器高,则Column容器的高是子元素高的总和
.height("100%")
// 不设置Column容器宽,则Column容器的宽等于子元素的宽
.width("100%")
.justifyContent(FlexAlign.SpaceEvenly)
.alignItems(HorizontalAlign.Center)
}
}
除了通过alignItems
属性控制所有子元素在容器交叉轴上的对齐方式外,alignSelf
属性用于控制单个子元素在容器交叉轴上的对齐方式,其优先级高于alignItems
属性。
@Entry
@Component
struct ColumnLayout {
build() {
Column({space: 20}) {
Button("第一按钮")
.alignSelf(ItemAlign.Stretch)
Button("第二按钮")
.alignSelf(ItemAlign.Start)
Button("第三按钮")
}
// 不设置Column容器高,则Column容器的高是子元素高的总和
.height("100%")
// 不设置Column容器宽,则Column容器的宽等于子元素的宽
.width("100%")
.justifyContent(FlexAlign.SpaceEvenly)
.alignItems(HorizontalAlign.Center)
}
}