鸿蒙食物详情页案例实战

2023-12-28 16:51:58 浏览数 (2)

作者:坚果 团队:坚果派 团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营, 本人为华为HDE,中国计算机学会CCF专业会员,2022OpenHarmony布道师,开发者联盟优秀讲师,2023年开源之夏导师,2023年OpenHarmony应用创新赛导师,OpenHarmony金融应用创新赛导师,RISC-V OpenHarmony应用创意赛导师,OpenHarmony三方库贡献者,开放原子开源基金会技术 生态贡献者,第一批开放原子开源讲师,曾受邀参加2022,2023HDC大会,OpenHarmony校源行开源大使,InfoQ签约作者,CSDN博客专家,电子发烧友MVP,51CTO博客专家博主,阿里云博客专家,专注于分享的技术包括HarmonyOS/OpenHarmony,ArkUI-X,元服务,服务卡片,华为自研语言,在2022年战码活动中,带领100余人完成pr的提交,配合孵化三个小队长。也在此活动中累计完成1.5W行代码提交,同时担任2023OpenHarmony创新赛评委,以及在2023年OpenHarmony创新赛中。累计辅导60 队伍,完成作品的提交,在相关社区累计发布OpenHarmony相关技术文章/视频50 ,获得20w 浏览量。团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地,欢迎合作。

运行环境

DevEco Studio:4.0Release

OpenHarmony SDK API10

开发板:润和DAYU200

运行效果

完整代码

代码语言:javascript复制
@Component
struct NustImageDisplay {
  build() {
    Stack({ alignContent: Alignment.BottomStart }) {
      Image($r('app.media.nust'))
        .objectFit(ImageFit.Cover)
      Text('大坚果')
        .fontSize(26)
        .fontWeight(500)
        .margin({ left: 26, bottom: 17.4 })
    }
    .backgroundColor('#FFedf2f5')
    .height(357)
  }
}

@Component
struct ContentTable {
  @Builder IngredientItem(title:string, name?: string, value?: string) {
    Flex() {
      Text(title)
        .fontSize(17.4)
        .fontWeight(FontWeight.Bold)
        .layoutWeight(1)
      Flex({ alignItems: ItemAlign.Center }) {
        Text(name)
          .fontSize(17.4)
          .flexGrow(1)
        Text(value)
          .fontSize(17.4)
      }
      .layoutWeight(2)
    }
  }

  build() {
    Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
      this.IngredientItem('卡路里', '17kcal',"卡路里")
      this.IngredientItem('营养', '蛋白质', '0.9g')
      this.IngredientItem(' ', '油脂', '0.2g')
      this.IngredientItem(' ', '碳水化合物', '3.9g')
      this.IngredientItem(' ', '维生素C', '17.8mg')
    }
    .padding({ top: 20, right: 20, left: 20 })
    .height(250)
  }
}

@Entry
@Component
struct FoodDetail {
  build() {
    Column() {
      NustImageDisplay()
      ContentTable()
    }
    .alignItems(HorizontalAlign.Center)
  }
}

接下来就来带大家拆解一下。用到的几个组件。

Flex

以弹性方式布局子组件的容器组件。

Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。

Flex(value?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign })

标准Flex布局容器。

  • direction:子组件在Flex容器上排列的方向,即主轴的方向。
  • wrap:Flex容器是单行/列还是多行/列排列。说明: 在多行布局时,通过交叉轴方向,确认新行堆叠方向。
  • justifyContent:所有子组件在Flex容器主轴上的对齐格式。
  • alignItems:所有子组件在Flex容器交叉轴上的对齐格式。
  • alignContent:交叉轴中有额外的空间时,多行内容的对齐方式。仅在wrap为Wrap或WrapReverse下生效。

Stack

堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。

Stack(value?: { alignContent?: Alignment })

  • alignContent:设置子组件在容器内的对齐方式。默认值:Alignment.Center

Column

横向布局元素间距

Space:纵向布局元素垂直方向间距。

  • alignItems:设置子组件在水平方向上的对齐格式。默认值:HorizontalAlign.Center
  • justifyContent:设置子组件在垂直方向上的对齐格式。

Row

沿水平方向布局容器。

Space:沿垂直方向布局的容器。

  • alignItems:设置子组件在垂直方向上的对齐格式。默认值:VerticalAlign.Center
  • justifyContent:设置子组件在水平方向上的对齐格式。FlexAlign.Start

以上就是用到的几个组件和介绍。大家可以自己复制代码到本地,然后打开预览器,或者真机测试。

0 人点赞