鸿蒙仓颉语言开发实战教程:购物车页面

news2025/6/8 16:07:46

大家上午好,仓颉语言商城应用的开发进程已经过半,不知道大家通过这一系列的教程对仓颉开发是否有了进一步的了解。今天要分享的购物车页面:

看到这个页面,我们首先要对它简单的分析一下。这个页面一共分为三部分,分别是导航栏、购物车列表和底部的结算栏。也能它们是column布局,那么怎么样让这三部分刚好撑满整个页面,有一个简单的办法:给导航栏和结算栏一个固定的高度,然后给List组件设置layoutWeight(1)属性即可。写一个简单的页面结构:

Column{
    Row{
        //导航栏
    }
    .width(100.percent)
    .height(60)
    List{
        //购物车列表
    }
    .width(100.percent)
    .layoutWeight(1)
    Row{
        //结算栏
    }
    .width(100.percent)
    .height(45)
}
.width(100.percent)
.height(100.percent)

购物车列表

购物车列表毫无疑问使用List组件,今天的List组件比之前多了一些内容,就是店铺名字这部分的内容,我们使用List中的header来实现。

我首先写下header部分的内容,并自定义一个组件itemHead:

@Builder func itemHead(text:String) {
    Row{
        Text(text)
        .fontSize(15)
        .backgroundColor(Color.WHITE)
        .padding(10)
          Image(@r(app.media.righticon))
            .height(18)
            .width(18)
            .objectFit(ImageFit.Contain)
            .margin(left:-5)
    }
    .width(100.percent)
    .height(35)
    .alignItems(VerticalAlign.Center)
}

在List中使用这个组件,并传入参数,就是店铺的名字:

List(space:12) {
  ListItemGroup(ListItemGroupParams(header:{=>bind(this.itemHead,this)('幽蓝旗舰店')})){
       
  })
}

然后就是列表内容部分,循环列表内容我们只看其中一个就行了。

同样先把它简单的分析一下,大家可以把它分为两部分或者三部分,拆分开来就会比较简单了。

要注意的是这部分内容需要横向占满整个屏幕,我们同样可以使用layoutWeight来实现。

下面为大家贴上列表内容加上循环遍历的实现代码。仓颉Foreach写法比较不同,需要慢慢习惯:

ForEach(this.carList,
    itemGeneratorFunc:{
        item:CarItem, index: Int64 => ListItem {
            Row(8){
                Image(@r(app.media.unselect))
                .width(17)
                .height(17)
        Image(item.getCover())
        .width(90)
        .height(90)
        .borderRadius(6)
        Column {
            Column(5){
                Text(item.getName())
                .fontSize(16)
                .fontColor(Color.BLACK)
                Text('天蓝色,XL(180)')
                .fontSize(14)
                .fontColor(Color.GRAY)
                .padding(4)
                .backgroundColor(Color(241, 241, 241, alpha: 1.0))
                .borderRadius(4)
            }
            .alignItems(HorizontalAlign.Start)
            Row {
                Row{
                    Text('¥')
                    .fontColor(Color.RED)
                    .fontSize(13)
                    Text(item.getPrice())
                    .fontSize(18)
                    .fontColor(Color.RED)
                    .fontWeight(FontWeight.Bold)
                }
                .alignItems(VerticalAlign.Bottom)
                Row (6){
                    Text('-')
                    .fontColor(Color(74, 74, 74, alpha: 1.0))
                    .fontSize(16)
                     Text(item.getCount().toString())
                     .fontSize(14)
                     .fontColor(Color.BLACK)
                     .padding(4)
                     .backgroundColor(Color(241, 241, 241, alpha: 1.0))
                    .textAlign(TextAlign.Center)
                    .width(40)
                    .height(28)
                    .borderRadius(6)
                    Text('+')
                    .fontColor(Color(74, 74, 74, alpha: 1.0))
                    .fontSize(16)
                }
                .alignItems(VerticalAlign.Center)
            }
            .alignItems(VerticalAlign.Center)
            .justifyContent(FlexAlign.SpaceBetween)
            .width(100.percent)
        }
        .layoutWeight(1)
        .alignItems(HorizontalAlign.Start)
         .height(90)
         .justifyContent(FlexAlign.SpaceBetween)
     }
      .width(100.percent)
      .height(110)
        }
    })

结算栏

相比购物车列表,结算栏的内容就比较简单了,使用几个Row容器就能实现:

Row(6){
        Row(){
        Text('合计')
        .fontSize(13)
        .fontColor(Color.BLACK)
        Text('¥')
            .fontColor(Color.RED)
            .fontSize(13)
            .margin(left:5)
                            Text('0')
                            .fontSize(18)
                            .fontColor(Color.RED)
                            .fontWeight(FontWeight.Bold)
    }
    .alignItems(VerticalAlign.Bottom)
    Text('结算')
    .fontColor(Color.WHITE)
    .backgroundColor(Color.RED)
    .width(100)
    .height(38)
    .borderRadius(6)
        .textAlign(TextAlign.Center)
    }

以上就是购物车页面开发的内容分享,感谢阅读。#HarmonyOS语言##仓颉##购物#​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2404295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OPENCV的AT函数

一.AT函数介绍 在 OpenCV 中,at() 是一个模板成员函数,用于访问和修改矩阵或图像中特定位置的元素。它提供了一种直接且类型安全的方式来操作单个像素值,但需要注意其性能和类型匹配问题 AT函数是OPENCV中重要的函数…

ISO 17387——解读自动驾驶相关标准法规(LCDAS)

Intelligent transport systems — Lane change decision aid systems (LCDAS) — Performance requirements and test procedures(First edition: 2008-05-01) 原文链接:https://cdn.standards.iteh.ai/samples/43654/701fd49bde7b4d3db165444b7c6f0c53/ISO-17387…

智慧零售管理中的客流统计与属性分析

智慧零售管理中的视觉分析技术应用 一、背景与需求 随着智慧零售的快速发展,传统零售门店面临管理效率低、安全风险高、客户体验差等问题。通过视觉分析技术,智慧零售管理系统可实现对门店内人员行为的实时监控与数据分析,从而提升运营效率…

Ps:Adobe PDF 预设

Ps菜单:编辑/Adobe PDF 预设 Edit/Adobe PDF Presets 通过“Adobe PDF 预设” Adobe PDF Presets对话框,可以查看 Adobe PDF 预设,了解复杂的 PDF 设置。还可以编辑、新建、删除、载入预设,根据最终用途(如高质量打印、…

靶场(二十)---靶场体会小白心得 ---jacko

老样子开局先看端口,先看http端口 PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: H2 Database Engine (redirect) | http-methods: |_ Potentially risky methods: TRACE |_http-server-header:…

​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​

—聚酰亚胺/陶瓷基板在5G与航天场景的产业化应用​​ ​​一、极端环境材料体系:突破温域与频率极限​​ ​​聚酰亚胺基板(PI)的航天级稳定性​​ 猎板在卫星通信PCB中采用真空层压工艺处理聚酰亚胺基材(Dk≈10.2)&a…

WPF技术体系与现代化样式

目录 ​​1 WPF技术架构解析​​ ​​1.1 技术演进与定位​​ ​​1.2 核心机制对比​​ ​​2 样式与资源系统​​ ​​2.1 资源(Resource)定义与作用域​​ ​​2.2 样式(Style)与触发器​​ ​​3 开发环境配置(.NET 8)​​ ​​3.1 安装流程​​ ​​3.2 项目结…

【工具教程】PDF电子发票提取明细导出Excel表格,OFD电子发票行程单提取保存表格,具体操作流程

在企业财务管理领域,电子发票提取明细导出表格是不可或缺的工具。 月末财务结算时,财务人员需处理成百上千张电子发票,将发票明细导出为表格后,通过表格强大的数据处理功能,可自动分类汇总不同项目的支出金额&#xff…

基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真+程序+设计报告+讲解视频

DHT11温湿度远程监测proteus仿真 1. 主要功能2.仿真3. 程序4. 设计报告5. 资料清单&下载链接 基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真设计(仿真程序设计报告讲解视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C…

分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测

分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测 目录 分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测分类效果功能概述程序设计参考资料 分类效果 功能概述 该MATLAB代码实现了一个结合CNN、BiLSTM和注意力机制的高光谱数据分类预测模型&#x…

微软推出SQL Server 2025技术预览版,深化人工智能应用集成

在Build 2025 大会上,微软向开发者社区开放了SQL Server 2025的测试版本。该版本的技术改进主要涵盖人工智能功能集成、系统性能优化与开发工具链升级三个维度,展示了数据库管理系统在智能化演进方向上的重要进展。 智能数据处理功能更新 新版本的技术亮…

RocketMQ入门5.3.2版本(基于java、SpringBoot操作)

一、RocketMQ概述 RocketMQ是一款由阿里巴巴于2012年开源的分布式消息中间件,旨在提供高吞吐量、高可靠性的消息传递服务。主要特点有: 灵活的可扩展性 海量消息堆积能力 支持顺序消息 支持多种消息过滤方式 支持事务消息 支持回溯消费 支持延时消…

使用osqp求解简单二次规划问题

文章目录 一、问题描述二、数学推导1. 目标函数处理2. 约束条件处理 三、代码编写 一、问题描述 已知: m i n ( x 1 − 1 ) 2 ( x 2 − 2 ) 2 s . t . 0 ⩽ x 1 ⩽ 1.5 , 1 ⩽ x 2 ⩽ 2.5 min(x_1-1)^2(x_2-2)^2 \qquad s.t. \ \ 0 \leqslant x_1 \leqslant 1.5,…

【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等)

【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等) 更新以gitee为准: gitee 文章目录 通用统计数据结构更新函数附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什…

Spring AI(10)——STUDIO传输的MCP服务端

Spring AI MCP(模型上下文协议)服务器Starters提供了在 Spring Boot 应用程序中设置 MCP 服务器的自动配置。它支持将 MCP 服务器功能与 Spring Boot 的自动配置系统无缝集成。 本文主要演示支持STDIO传输的MCP服务器 仅支持STDIO传输的MCP服务器 导入j…

Sklearn 机器学习 缺失值处理 填充数据列的缺失值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 💡使用 Scikit-learn 处理数据缺失值的完整指南 在机器学习项目中,数据缺失是不可避…

猜字符位置游戏-position gasses

import java.util.*;public class Main {/*字符猜位置游戏;每次提交只能被告知答对几个位置;根据提示答对的位置数推测出每个字符对应的正确位置;*/public static void main(String[] args) {char startChar A;int gameLength 8;List<String> ballList new ArrayList&…

宝塔安装配置FRP

FRP&#xff08;Fast Reverse Proxy&#xff09;作为一款高性能的反向代理应用&#xff0c;能够帮助我们轻松实现内网穿透&#xff0c;将内网服务暴露到公网&#xff0c;满足远程访问、开发调试等多种需求。宝塔面板以其简洁易用的界面和强大的功能&#xff0c;成为众多站长和开…

元器件基础学习笔记——结型场效应晶体管 (JFET)

场效应晶体管&#xff08;Field Effect Transistor&#xff0c;FET&#xff09;简称场效应管&#xff0c;是一种三端子半导体器件&#xff0c;它根据施加到其其中一个端子的电场来控制电流的流动。与双极结型晶体管 &#xff08;BJT&#xff09; 不同&#xff0c;场效应晶体管 …

tableau 实战工作场景常用函数与LOD表达式的应用详解

这是tableau实战工作场景图表制作第七期--常用函数与LOD表达式的应用 数据资源已经与这篇博客捆绑&#xff0c;有需要者可以下载通过网盘分享的文件&#xff1a;3.2-8月成交数据.xlsx等3个文件 链接: https://pan.baidu.com/s/17WtUoZTqzoNo5kTFjua4hw?pwd0623 提取码: 06…