鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

  在鸿蒙ArkTS中,布局容器组件有很多,常见的有:
  ⑴ Column:(垂直布局容器):用于将子组件垂直排列。
  ⑵ Row:(水平布局容器):用于将子组件水平排列。
  ⑶ Flex:(弹性布局方式)它提供了更加有效的方法对容器中的子元素进行排列、对齐和分配剩余空间。
  ⑷ Stack:Stack布局是一种可以将多个组件按照一定顺序叠放的布局。
  ⑸ Grid(网格容器):用于创建二维网格布局,适合需要行列对齐的复杂布局。
  ⑹ List(列表容器):用于展示列表数据,可以设置列表项的布局和样式。
  ⑺ Tabs(页签容器):用于创建页签布局,允许用户在不同的页面或视图间切换。
  ⑻ Swiper(滑块视图容器):用于创建滑动视图,常用于图片轮播或广告等场景。
  ⑼ Scroll(可滑动的容器):允许用户滚动查看超出视图范围的内容。
  ⑽ RelativeContainer(相对布局容器):允许子元素相对于容器或指定的兄弟元素进行定位。
  上面的11中布局容器组件各有特点,共同的特性是:
  ⑴ 空间分配属性(如space):用于调整子组件之间的间距。
  ⑵ 对齐属性(如justifyContent和alignItems):用于设置子组件在主轴和交叉轴方向上的对齐方式。
  ⑶ 尺寸属性(如width和height):用于设置容器的宽度和高度。
  ⑷ 边距和填充(如padding和margin):用于设置容器的内边距和外边距。
  ⑸ 其他属性,比如背景色等。

  可以一起学习,方便对比。

  一、Column和Row

  Column和Row都是线性布局方式。

  Column组件:用于创建垂直方向的线性布局,其子组件会按照从上到下的顺序排列。
  Row组件:用于创建水平方向的线性布局,其子组件会按照从左到右的顺序排列。
  常用属性:
  ① width:设置组件的宽度。
  ② height:设置组件的高度。
  ③ alignment:设置子组件在垂直方向上的对齐方式(如顶部对齐、底部对齐、居中对齐等)。
  ④ spacing:设置子组件之间的间距。
  ⑤ backgroundColor:设置组件的背景颜色。
  ⑥ padding:设置组件的内边距。
  ⑦ Row组件的特有属性wrap:设置是否允许子组件换行(当子组件总宽度超过Row宽度时)。

  做一个2行三列的宫格布局,使用Column和Row。

// 获取随机颜色的函数
function getRandomColor() {
    const letters :string= '0123456789ABCDEF';
    let color:string = '#';
    for (let i = 0; i < 6; i++) {
      let Itemp:number=Math.floor(Math.random() * 16)
      color += letters.substr(Itemp,1);
    }
    return color;
}

@Entry
@Component
struct Index {
  str:string='在鸿蒙ArkTS中,Column和Row是两种常用的布局容器组件,它们分别用于垂直和水平布局。Column(垂直布局容器)用于将子组件垂直排列,Row(水平布局容器)用于将子组件水平排列。'
  build() {
    Column() {
        Row(){
          Column(){
            Text(this.str)
              .fontSize(18).fontColor(getRandomColor()).textAlign(TextAlign.Center)
              .maxLines(4).textOverflow({
              overflow:TextOverflow.Ellipsis
            })
          }.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)
          Column(){
            Text(this.str).fontSize(18).fontColor(getRandomColor()).align(Alignment.Center)
          }.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)
          Column(){
            Text(this.str).fontSize(18).fontColor(getRandomColor())
          }.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)
        }.height('50%')
        Row(){
          Column(){
           
### 使用 HarmonyOSColumnRowStack 组件实现页面布局HarmonyOS 开发中,`Column`、`Row` 和 `Stack` 是常用的布局组件,用于构建灵活且美观的界面。以下是这些组件的功能概述以及一个完整的示例代码。 #### 1. 布局组件功能说明 - **Column**: 从上到下排列子组件,支持主轴和交叉轴对齐方式配置[^1]。 - **Row**: 从左到右排列子组件,同样支持主轴和交叉轴对齐方式配置[^1]。 - **Stack**: 将子组件堆叠在一起,默认情况下最后一个添加的组件会显示在最上方[^2]。 #### 2. 示例代码:使用 ColumnRowStack 创建简单页面布局 以下是一个基于 HarmonyOSArkTS 编程语言编写的示例,展示如何组合使用这三个组件: ```typescript @Entry @Component struct PageLayout { @State message: string = '欢迎来到鸿蒙世界'; build() { Column({ space: 10 }) { // 外层 Column 控制整体垂直布局 Row({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { // 中间 Row 居中水平布局 Text('顶部标题') .fontSize(20) .fontColor('#FFFFFF') .backgroundColor('#3F51B5') // 蓝色背景 .padding({ top: 10, bottom: 10 }) .width('90%') .textAlign(TextAlign.Center) } .height(80) Stack({ alignContent: Alignment.TopCenter }) { // 底部 Stack 实现叠加效果 Rectangle() .fill('#FFEB3B') // 黄色矩形作为背景 .size({ width: 300, height: 200 }) Column({ space: 10 }) { // 叠加的内容区域 Text(this.message) .fontSize(16) .fontColor('#000000') Button('点击按钮') .onClick(() => { this.message = '已点击按钮'; }) .type(ButtonType.Capsule) .margin({ top: 20 }) } .padding({ all: 20 }) } .margin({ top: 20 }) } .width('100%') .height('100%') .backgroundColor('#EAEAEA') // 页面灰色背景 } } ``` #### 3. 关键点解析 - **外层 Column**: 定义整个页面的主要结构,包含两个部分:顶部标题区和底部内容区。 - **中间 Row**: 通过 `justifyContent` 和 `alignItems` 配置居中的水平布局[^1]。 - **底部 Stack**: 利用 `Alignment.TopCenter` 参数将黄色矩形放置于中心位置,并在其之上叠加文字和按钮[^2]。 #### 4. 效果描述 该布局实现了如下视觉效果: - 页面顶部有一个带有蓝色背景的文字标题,占据屏幕宽度的 90%,并居中显示。 - 页面中部有一块黄色矩形区域,在其内部嵌套了一个列布局,包含一段动态更新的文字消息和一个胶囊形状的按钮。 - 页面背景颜色为浅灰 (`#EAEAEA`),提供良好的对比度。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值