HarmonyOS NEXT实战教程:菜谱App

随着鸿蒙系统5.0的发布,兼容的机型越来越多,对于开发者来说机会也越来越多,大家不要气馁,学习鸿蒙肯定会有用武之地,我们要做的就是做好准备。今天跟大家分享实战教程是一个菜谱App。

首页这个页面可能会让初学者望而生畏,看起来比较复杂。但是仔细分析一下并不太难。幽蓝君再啰嗦一句,大家看到一个项目或者一个页面,不要拿过来就写,如果你不是特别熟悉,就先分析一下它大体是一个什么样的架构,分析明白再着手写代码。

这个页面首先是一个导航栏加一个列表组件List,列表中又包含了许多的样式。那我们就先把导航栏写出来:

@Builder NavigationMenu(){
    Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,alignItems:ItemAlign.Center}){
      Search({placeholder:'想吃点什么?'})
        .placeholderColor('#999999')
        .fontColor("#4a4a4a")
        .width('100%')
        .height(35)

      Stack({alignContent:Alignment.TopEnd}){
        Image($r('app.media.msg'))
          .width(24)
          .height(24)
          .objectFit(ImageFit.Auto)
          .margin({left:10})

        Text('3')
          .width(14)
          .height(14)
          .backgroundColor('#FF4F4F')
          .fontColor(Color.White)
          .textAlign(TextAlign.Center)
          .fontSize(8)
          .borderRadius(7)
          .borderColor(Color.White)
          .borderWidth(2)
          .borderStyle(BorderStyle.Solid)
          .margin({left:2,top:-2})
      }

    }
    .width('100%')
    .height(40)
    .padding({left:12,right:12})
  }

接下来分析下内容区域,由上而下,大家可以发现主要就两种样式:轮播图和网格列表,轮播图比较简单,以最上面的轮播图为例,分享一下相关代码:

Swiper(){
            Stack({alignContent:Alignment.Bottom}){
              Image($r('app.media.banner_1'))
                .width('100%')
                .height(260)
                .borderRadius(8)

              Column({space:5}){
                Text('麻辣鲜香·剁椒豆腐鱼')
                  .fontColor(Color.White)
                  .fontSize(18)
                Row(){
                  Row(){
                    Image($r('app.media.banner_icon'))
                      .width(16)
                      .height(16)
                      .borderRadius(8)
                    Text('爱做饭的老王')
                      .fontColor(Color.White)
                      .fontSize(12)
                      .margin({left:3})
                  }

                  Image($r('app.media.banner_like'))
                    .width(20)
                    .height(17)
                }
                .width('100%')
                .justifyContent(FlexAlign.SpaceBetween)
              }
              .alignItems(HorizontalAlign.Start)
              .padding({left:12,right:12})
              .margin({bottom:10})
            }
            .width('100%')
            .height(260)
            .onClick(()=>{
              router.pushUrl({
                url:'pages/menustep'
              })
            })
          }

热门活动的轮播图更加简单,不再赘述了,这样我们就只剩下网格类的样式了。网格组件Grid的用法和List类似,不过它可以使用rowsTemplate和columnsTemplate来控制元素大小来滚动方向,这一点大家可以多多实践。以分类部分为例,向大家介绍下Grid的用法:

Grid(){
            ForEach(this.functionList,(item:FunctionItem,index)=>{
              GridItem(){
                Column(){
                  Image(item.cover)
                    .height(70)
                    .width(60)
                  Text(item.title)
                    .fontColor('rgb(51,51,51)')
                    .fontSize(12)
                }
                .height(150)
                .alignItems(HorizontalAlign.Center)
              }
            })
          }
          .rowsTemplate('1fr 1fr')
          .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
          .height(180)
          .width('100%')

首页的部分就是这样,由小见大,其实所有页面的开发也就是这些东西,所以其他页面这里也不再赘述

posted @ 2024-10-25 16:36  幽蓝计划  阅读(7)  评论(0编辑  收藏  举报