首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >鸿蒙仓颉开发语言实战教程:实现商城应用首页

鸿蒙仓颉开发语言实战教程:实现商城应用首页

原创
作者头像
幽蓝计划
修改2025-07-22 07:44:52
修改2025-07-22 07:44:52
14000
代码可运行
举报
运行总次数:0
代码可运行

经过了几天的入门教程,我们终于进入到了仓颉开发语言的实战环节,今天分享的内容是实现商城应用的首页页面,效果图如下:

图片
图片

首页的内容包括导航栏、轮播图、商品分类和商品列表,我们下面逐一介绍。

下面再为大家分享一个关于布局的基础知识,所有的布局方式无非分为三种:横向布局、竖向布局和层叠布局,其他的布局方式均有这三种方式衍生而来,比如弹性布局、网格布局、列表布局等等。

所以我们也可以对今天的页面先做一个简单的分析,它首先是一个从上至下的竖向布局,中间嵌套了横向布局方式,也可以说是网格布局方式。再仔细一点分析,它是由导航栏和列表组件构成,在列表组件中又有不同的布局结构。

每一次开发项目之前都进行类似的分析,开发就会变得简单。做完分析,我们就可以着手写代码了。

导航栏

仓颉语言中是没有导航栏组件的,我们需要自己去开发。此处的导航栏也比较简单,只有一个搜索框,仓颉中的常见组件我们已经在之前的文章中做了讲解。所以这里就直接Row容器下添加Search组件:

代码语言:javascript
代码运行次数:0
运行
复制
Row {
  Search(placeholder: "搜索",  controller: this.searchController)
  .height(38)
}.width(100.percent).height(60).padding(right: 12, left: 12)

轮播图

仓颉是有轮播图组件的,用法也比较简单:

代码语言:javascript
代码运行次数:0
运行
复制
Swiper{
  Image(@r(app.media.banner1)).width(100.percent).height(100.percent)
  Image(@r(app.media.banner2)).width(100.percent).height(100.percent)
  Image(@r(app.media.banner3)).width(100.percent).height(100.percent)
}.width(100.percent).height(160).duration(1500).autoPlay(true)

商品分类

这里我们会遇到仓颉的第一个复杂容器Grid,作用和ArkTs中的Grid一样:

代码语言:javascript
代码运行次数:0
运行
复制
Grid {
          ForEach(
              goodsTypeList,
              itemGeneratorFunc: {
                  item: TypeItem, index: Int64 => GridItem {
                      Column(){
                          Image(item.getImage()).width(40).height(40).margin(bottom: 4)
                          Text(item.getTitle()).fontSize(13).textAlign(TextAlign.Center).fontWeight(FontWeight.W400).margin(top:5)
                      }
                  }
              }
          )
      }.columnsTemplate('1fr 1fr 1fr 1fr').rowsTemplate('1fr 1fr')
      .width(100.percent).height(150).backgroundColor(0xFFFFFF)

商品列表

商品列表和分类几乎一样,只不过由4列改为2列:

代码语言:javascript
代码运行次数:0
运行
复制
Grid {
         ForEach(
             goodsList,
             itemGeneratorFunc: {
                 item: GoodsItem, index: Int64 => GridItem {
                     Column(){
                         Image(item.getImage()).width(100.percent).height(200).margin(bottom: 4)
                         Text(item.getTitle()).fontSize(14).textAlign(TextAlign.Start).fontWeight(FontWeight.W400)
                         Text(item.getPrice()).fontSize(12).textAlign(TextAlign.Center).fontWeight(FontWeight.W400).fontColor(Color.RED)
                     }
                     .alignItems(HorizontalAlign.Start)
                 }
             }
         )
     }.columnsTemplate('1fr 1fr').columnsGap(10).rowsGap(10)
     .width(100.percent).backgroundColor(0xFFFFFF).padding( right: 10, left: 10)

最后要注意,除导航栏外,其他组件是需要可以滚动的,所以需要把它们放到List组件中,注意List的属性设置,这里使用layoutWeight来自动分配空间:

代码语言:javascript
代码运行次数:0
运行
复制
List() {
    //banner
    ListItem {}    
    //分类
    ListItem {}
    //商品
    ListItem {}
}.layoutWeight(1)

感谢阅读。##HarmonyOS语言##仓颉##购物#

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档