首页 > 其他分享 >鸿蒙开发实践项目——商城列表

鸿蒙开发实践项目——商城列表

时间:2024-06-30 17:57:52浏览次数:22  
标签:鸿蒙 Item Text app 列表 item fontSize 商城

 一、项目概述

在ArkTS环境中运用各个组件简单构建一个商城列表的页面,要求熟练掌握基本组件的用法以及灵活运用的程度。同时页面布局较为简单,适用于鸿蒙开发的新手的实践项目。总体构建页面最终如下:

二、项目结构

根据预览图可先构建出一副构架图。同时因为所需编写的代码比较多,需要抽取部分代码来简写主代码。最终可根据构架图所写出对应的项目分类。构架图及项目分类如下:

三、项目分解——头部标题部分

因为这个标题部分以后会被经常用到,所以在新建立的CommonComponents里编写标题部分的代码,以方便导出应用到各个页面上。这个商城列表也不例外。

而根据预览图我们可知,整个商城列表是纵向排列,标题部分是横向排列。因此标题部分整体用Row组件包括。

剩下的就很简单了,用两个Inmage组件引入两个图标,再在两个图标中间用Text组件编写标题的名字,最后分别设好宽度和高度以及标题的字体样式,把整体用export导出就完成了。

其中需要注意的是,因为这个自定义的组件可能会不止一次用到,所以标题名字不能定死,需要定义一个标题类以方便更新。代码如下:

@Component
export  struct Header{
  private title:ResourceStr
  build() {
    Row() {
      Image($r('app.media.back'))
        .width(30)
      Text(this.title)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
      Blank()
      Image($r('app.media.refresh'))
        .width(30)
    }
    .width('100%')
    .height(30)
  }
}
 四、项目分解——列表部分
4.1自定义列表样式

根据预览图我们可知,这个列表需要List循环渲染,这样只需做一种样式便可都循环渲染,简洁了代码空间。

首先,我们需要单独定义一个列表样式的自定义组件。列表样式不乏有二,图片以及价格信息。

其中,单个列表信息是横向排列,而价格信息则是纵向排列。所以应该用Row组件包裹着Column组件。图片只需用Image组件引入并设置好宽度以及内外边距就可。关键在于价格信息有三行或是一行,所以我们需要用if-else判断语句。

而这些图片以及价格信息需要事先定义好一个类,以方便引用。整体如下;

class Item{
  name: string
  image: ResourceStr
  price: number
  discount:number

  constructor( name: string,image: ResourceStr,price: number,discount:number=0) {
    this.name = name
    this.image = image
    this.price = price
    this.discount = discount
  }
}

//全局自定义构建函数↓ ↓ ↓
@Builder function ItemCard(item: Item){
  Row({space:20}){
    Image(item.image)
      .width(100)
    Column({space:10}){
      if (item.discount){
        Text(item.name)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
        Text('原价:¥'+ item.price)
          .fontColor('#CCC')
          .fontSize(14)
          .decoration({type:TextDecorationType.LineThrough})
        Text('折扣价:¥'+ (item.price-item.discount))
          .fontColor('#F36')
          .fontSize(18)
        Text('补贴:¥'+ item.discount)
          .fontColor('#F36')
          .fontSize(18)
        Text('¥'+ item.price)
          .fontColor('#F36')
          .fontSize(18)
      }else {
        Text(item.name)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
        Text('¥'+ item.price)
          .fontColor('#F36')
          .fontSize(18)
      }
    }
    .height('100%')
    .alignItems(HorizontalAlign.Start)
  }
  .width('100%')
  .backgroundColor('#FFF')
  .borderRadius(20)
  .height(120)
  .padding(10)
}
4.2、主体代码

列表样式定义好,最后只需写一个数组,把这些商品所需信息输入进去。最后运用List和Foreach循环渲染单个列表样式,再做些宽高等页面调整,导入标题部分,整个页面就完成了。

import {Header} from '../componets/CommonComponents'
@Entry
@Component
struct ItemPage{
  private items: Array<Item>= [
    new Item('华为nova12',$r('app.media.1'),3399),
    new Item('华为Mate60',$r('app.media.2'),6999),
    new Item('华为Matebookxpro',$r('app.media.3'),14999,599),
    new Item('华为Matepadpro',$r('app.media.4'),5699),
    new Item('华为Freebuds4e',$r('app.media.5'),399),
    new Item('华为Matebookk14',$r('app.media.6'),5699,200),
    new Item('华为Matex5',$r('app.media.7'),12999)
  ]
  build(){
    Column({space:8}){
     //标题部分
      Header({title:'苹果商城'})
       .margin({bottom:20})

      List({space:10}) {
        ForEach(
        this.items,
        (item:Item) => {
          ListItem(){
           ItemCard(item)
          }
        }
      )}
      .width('100%')
      .layoutWeight(1)
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#EFEFEF')
    .padding(20)
  }
}

标签:鸿蒙,Item,Text,app,列表,item,fontSize,商城
From: https://blog.csdn.net/2401_83401870/article/details/140021316

相关文章

  • 如何读取 ALV 列表中保存的布局元数据?
    我有一个ALV列表作为程序的输出,并且需要能够动态获取/提取列及其位置。用户还可以将列/位置保存为布局以供将来使用,我希望获取已保存布局的相关信息。我希望以内部表格的形式获取ALV列表的列及其位置,以便进一步使用,例如,生成.xls文件。获取和保......
  • 华为HDC开发者大会鸿蒙进展超预期
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在数字化浪潮的推动下,华为鸿蒙系统(HarmonyOS)以其革命性的创新,引领着全球科技的新趋势。2024年华为开发者大会(HDC2024)上,华为揭开了HarmonyOSNEXT的神秘面纱,标志着"......
  • Java毕业设计基于SSM的超好听乐器销售购物商城系统
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本缪斯乐器购物网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......
  • 基于java jsp ssm vue网上书城图书销售商城vue带商家(源码+LW+部署讲解)
    前言......
  • 基本数据类型之列表***
    先来总结下数据类型数字、字符串、布尔型、列表、元组、字典、集合可变数据类型:列表、字典、集合--所谓可变就是可以被修改,且修改后在内存中id不变不可变数据类型:字符串、元组、数字有序:字符串、列表、元组**获取元素的方法包括:索引、切片、for循环无序:字典、集合其中数字......
  • 【鸿蒙】ERROR_GET_BUNDLE_INSTALLER_FAILED
    错误信息[ERROR_GET_BUNDLE_INSTALLER_FAILED]Troubleshootingguide$hdcfilesendD:\Huawei\devEcoProjects\entry\build\default\outputs\default\entry-default-unsigned.hap/sdcard/e8a215ea7be1444197e6a58ebda7721f/entry-default-unsigned.hapErrorwhile......
  • 【鸿蒙毕设源码】鸿蒙应用商城app
    基于鸿蒙的应用市场app本项目分为管理员和用户两个角色其中管理员使用web管理后台,用户使用鸿蒙app鸿蒙基于ArkTS、Api9、stage模型开发后端支持PHP和Java的Springboot代码PHP版代码:【鸿蒙】基于PHP的鸿蒙应用市场基于鸿蒙的应用市场app本项目分为管理员和用户两个角色其中......
  • 玩转zencart自助搭建卖货商城,zencart外贸建站完全实操手册-36节课
    课程目录:1-你也可用zencart自助建站1.mp42-Zencart它能做什么1.mp43-Zencart使用所需环境和条件1.mp44-zencart环境工具xampp安装1.mp45-zencart安装演示1.mp46-模板切换不带mysql数据库1.mp47-手动配置带sql数据库模板1.mp48-网站标题关键词描述设置1.mp49-网站logo......
  • 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jv
    持续学习&持续更新中…守破离【雷丰阳-谷粒商城】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm压力测试概述性能指标JMeter基本使用添加线程组添加HTTP请求添加监听器启动压测&查看分析结果JMeterAddressAlreadyinuse错误解决性......
  • Java项目:springboot汉服文化bbs商城系统(计算机毕业设计)
    作者主页:Java毕设网 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码一、项目介绍汉服文化bbs商城系统,主要分为前后台。共分两种角色:管理员与普通用户;管理员可登录前后台,普通用户仅可登录前台;普通用户登录后可发布、修改、删除自己的文章;前台主要......