、
赞
踩
Grid
容器组件和子组件 GridItem
,用于构建网格布局。Grid
容器组件默认占满父容器。Grid
组件提供了 rowsTemplate
和 columnsTemplate
属性用于设置网格布局行列数量与尺寸占比。
@Entry
@Component
struct GridLayout {
build() {
Grid() {
}
// 垂直方向分成3份,每行占一份
.rowsTemplate("1fr 1fr 1fr")
// 水平方向分成4份,第一列占1份,第二列占2份,第三列占1份
.columnsTemplate("1fr 2fr 1fr")
}
}
Grid
组件通过 rowsGap
和 columnsGap
属性设置网格布局的行列间距。
@Entry @Component struct GridLayout { build() { Grid() { } // 垂直方向分成3份,每行占一份 .rowsTemplate("1fr 1fr 1fr") // 水平方向分成4份,第一列占1份,第二列占2份,第三列占1份 .columnsTemplate("1fr 2fr 1fr") // 行间距 .rowsGap(10) // 列间距 .columnsGap(10) } }
GridItem 组件通过设置 rowStart(起始行号)、rowEnd(终点行号)、columnStart(起始列号)和 columnEnd(终点列号)属性,表示子组件所占行列数。
@Entry @Component struct GridLayout { build() { Grid() { GridItem() .rowStart(0) .rowEnd(0) .columnStart(0) .columnEnd(1) .backgroundColor(Color.Red) GridItem() .rowStart(0) .rowEnd(1) .columnStart(2) .columnEnd(1) .backgroundColor(Color.Orange) GridItem() .rowStart(1) .rowEnd(2) .columnStart(0) .columnEnd(0) .backgroundColor(Color.Blue) GridItem() .rowStart(1) .rowEnd(1) .columnStart(1) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() .rowStart(2) .rowEnd(3) .columnStart(1) .columnEnd(2) .backgroundColor(Color.Yellow) } // 分成3行,每行等分高度 .rowsTemplate("1fr 1fr 1fr") // 分成3列,每列等分宽度 .columnsTemplate("1fr 1fr 1fr") } }
ps:行号和列号的起始序号都是0。
@Entry @Component struct GridLayout { build() { Grid() { // 第一行内容 GridItem(){ Text("0") .fontSize(50) } .rowStart(0) .rowEnd(0) .columnStart(0) .columnEnd(3) .backgroundColor(Color.Pink) // 设置子元素水平尾部、垂直居中对齐 .align(Alignment.End) // 第二行内容 GridItem() { Text("CE") } .rowStart(1) .rowEnd(1) .columnStart(0) .columnEnd(0) .backgroundColor(Color.Pink) GridItem() { Text("C") } .rowStart(1) .rowEnd(1) .columnStart(1) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() { Text("/") } .rowStart(1) .rowEnd(1) .columnStart(2) .columnEnd(2) .backgroundColor(Color.Pink) GridItem() { Text("*") } .rowStart(1) .rowEnd(1) .columnStart(3) .columnEnd(3) .backgroundColor(Color.Pink) // 第三行内容 GridItem() { Text("7") } .rowStart(2) .rowEnd(2) .columnStart(0) .columnEnd(0) .backgroundColor(Color.Pink) GridItem() { Text("8") } .rowStart(2) .rowEnd(2) .columnStart(1) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() { Text("9") } .rowStart(2) .rowEnd(2) .columnStart(2) .columnEnd(2) .backgroundColor(Color.Pink) GridItem() { Text("-") } .rowStart(2) .rowEnd(2) .columnStart(3) .columnEnd(3) .backgroundColor(Color.Pink) // 第四行内容 GridItem() { Text("4") } .rowStart(3) .rowEnd(3) .columnStart(0) .columnEnd(0) .backgroundColor(Color.Pink) GridItem() { Text("5") } .rowStart(3) .rowEnd(3) .columnStart(1) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() { Text("6") } .rowStart(3) .rowEnd(3) .columnStart(2) .columnEnd(2) .backgroundColor(Color.Pink) GridItem() { Text("+") } .rowStart(2) .rowEnd(2) .columnStart(3) .columnEnd(3) .backgroundColor(Color.Pink) // 第五行内容 GridItem() { Text("1") } .rowStart(4) .rowEnd(4) .columnStart(0) .columnEnd(0) .backgroundColor(Color.Pink) GridItem() { Text("2") } .rowStart(4) .rowEnd(4) .columnStart(1) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() { Text("3") } .rowStart(4) .rowEnd(4) .columnStart(2) .columnEnd(2) .backgroundColor(Color.Pink) // 第六行内容 GridItem() { Text("0") } .rowStart(5) .rowEnd(5) .columnStart(0) .columnEnd(1) .backgroundColor(Color.Pink) GridItem() { Text(".") } .rowStart(5) .rowEnd(5) .columnStart(2) .columnEnd(2) .backgroundColor(Color.Pink) GridItem() { Text("=") } .rowStart(4) .rowEnd(5) .columnStart(3) .columnEnd(3) .backgroundColor(Color.Pink) } // 分成6行,第一行是其他行的高度两倍 .rowsTemplate("2fr 1fr 1fr 1fr 1fr 1fr") // 分成4列,每列等宽 .columnsTemplate("1fr 1fr 1fr 1fr") // 列间距10 .columnsGap(10) // 行间距10 .rowsGap(10) } }
ps:为了便于初学者理解,上面代码没有采用ForEach的方式创建子组件
在设置Grid
的行列数量与占比时,仅设置rowsTemplate
或仅设置columnsTemplate
属性,网格单元按照设置的方向排列,超出Grid
显示区域后,Grid拥有可滚动能力。
rowsTemplate
属性,在水平方向可滚动columnsTemplate
属性,在垂直方向可滚动@Entry @Component struct GridLayout { build() { Grid() { GridItem() .width(200) .backgroundColor(Color.Pink) GridItem() .width(200) .backgroundColor(Color.Blue) GridItem() .width(200) .backgroundColor(Color.Brown) GridItem() .width(200) .backgroundColor(Color.Gray) } // 等分成2行 .rowsTemplate("1fr 1fr") // 列间距10 .columnsGap(10) // 行间距10 .rowsGap(10) } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。