HarmonyOS NEXT星河版之美团外卖点餐功能实战(上)

文章目录

    • 一、目标
    • 二、开撸
      • 2.1 目录结构
      • 2.2 页面模块拆分
      • 2.3 主体拆分布局
      • 2.4 底部购物车布局
      • 2.5 顶部布局
      • 2.6 点菜布局---左
      • 2.7 菜品Item封装
      • 2.7 点菜布局---右
      • 2.8 主页面整体布局
    • 三、小结

一、目标

在这里插入图片描述
在这里插入图片描述

二、开撸

2.1 目录结构

在这里插入图片描述

2.2 页面模块拆分

将页面主体拆为三部分,如图所示:
在这里插入图片描述

2.3 主体拆分布局

顶部view:

@Component
export struct MTTopView {build() {Row() {Text('top').width('100%').textAlign(TextAlign.Center)}.height(52).width('100%').backgroundColor(Color.White)}
}

主内容区view:

@Component
export struct MTContentView {build() {Row() {Text('content').width('100%').textAlign(TextAlign.Center)}.height('100%').width('100%').backgroundColor(Color.Gray)}
}

底部view:

@Component
export struct MTBottomView {build() {Column() {Text('bottom').width('100%').height('100%').textAlign(TextAlign.Center)}.height(52).width('80%').margin({ bottom: 20 }).backgroundColor(Color.Red)}
}

预览如下:
在这里插入图片描述

2.4 底部购物车布局

在这里插入图片描述

@Component
export struct MTBottomView {build() {Row() {// 小哥+角标Badge({ value: '0', style: { badgeSize: 18 }, position: BadgePosition.Right }) {Image($r('app.media.ic_public_cart')).height(69).width(47).position({y: -20})}.margin({ left: 28, right: 12 })// 金额+描述Column() {Text() {Span('¥').fontColor(Color.White).fontSize(12)Span('0.00').fontColor(Color.White).fontSize(25)}Text('预估另需配送费¥5').fontColor($r('app.color.search_font_color')).fontSize(12)}.alignItems(HorizontalAlign.Start).layoutWeight(1)// 去结算Text('去结算').width(80).height(50).fontSize(16).backgroundColor($r('app.color.main_color')).textAlign(TextAlign.Center).borderRadius({topRight: 25,bottomRight: 25})}.height(50).width('88%').margin({ bottom: 20 }).backgroundColor(Color.Black).borderRadius(26)}
}

2.5 顶部布局

在这里插入图片描述


@Component
export struct MTTopView {@BuilderNavItem(active: boolean, title: string, subTitle?: string) {Column() {Text() {Span(title)if (subTitle) {Span(' ' + subTitle).fontSize(10).fontColor(active ? $r("app.color.black") : $r("app.color.un_select_color"))}}.layoutWeight(1).fontColor(active ? $r("app.color.black") : $r("app.color.un_select_color")).fontWeight(active ? FontWeight.Bold : FontWeight.Normal)Text().height(2).width(20).margin({ left: 6 }).backgroundColor(active ? $r("app.color.select_border_color") : 'transparent')}.width(73).alignItems(HorizontalAlign.Start).padding({ top: 3 })}build() {Row() {this.NavItem(true, '点菜')this.NavItem(false, '评价', '1796')this.NavItem(false, '商家')Row() {Image($r('app.media.ic_public_search')).width(14).aspectRatio(1).fillColor($r("app.color.search_font_color"))TextInput({ placeholder: '请输入' }).fontSize(12).placeholderFont({ size: 12 }).fontColor($r("app.color.search_back_color")).backgroundColor(Color.Transparent)}.backgroundColor($r("app.color.search_back_color")).height(28).borderRadius(13).padding({ left: 5, right: 5 }).layoutWeight(1)}.padding({ left: 15, right: 15 }).height(40).border({ width: { bottom: 0.5 }, color: $r("app.color.top_border_color") })}
}

2.6 点菜布局—左

在这里插入图片描述

@Component
export struct MTContentView {categoryList: string[] = ['一人套餐', '特色烧烤', '杂粮主食']@State categoryIndex: number = 0build() {Row() {// 左侧分类Column() {ForEach(this.categoryList, (item: string, index: number) => {Text(item).height(50).width('100%').textAlign(TextAlign.Center).backgroundColor(this.categoryIndex === index ? Color.White : '#F6F6F6').onClick(() => {this.categoryIndex = index})})}.width(100).backgroundColor('#F6F6F6').height('100%')// 右侧食品列表}
}

2.7 菜品Item封装

在这里插入图片描述

@Preview
@Component
export struct MTFoodItem {build() {Row() {Image('https://images.tmtpost.com/uploads/images/2022/09/c0de0f8e1051beb409d189a7283a3ccd_1664523457.jpeg?imageMogr2/auto-orient/strip/interlace/1/quality/85/thumbnail/1400x933/gravity/center/crop/!1400x933&ext=.jpeg').width(90).aspectRatio(1)Column({ space: 5 }) {Text('小份酸汤莜面鱼鱼+肉夹馍套餐').textOverflow({overflow: TextOverflow.Ellipsis,}).maxLines(2).fontWeight(600)Text('酸汤莜面鱼鱼,主料:酸汤、莜面 肉夹馍,主料:白皮饼、猪肉').textOverflow({overflow: TextOverflow.Ellipsis,}).maxLines(1).fontSize(12).fontColor($r("app.color.food_item_second_color"))Text('点评网友推荐').fontSize(10).backgroundColor($r("app.color.food_item_label_color")).fontColor($r("app.color.font_main_color")).padding({ top: 2, bottom: 2, right: 5, left: 5 }).borderRadius(2)Text() {Span('月销售40')Span(' ')Span('好评度100%')}.fontSize(12).fontColor($r("app.color.black"))Row() {Text() {Span('¥ ').fontColor($r("app.color.font_main_color")).fontSize(10)Span('34.23').fontColor($r("app.color.font_main_color")).fontWeight(FontWeight.Bold)}}.justifyContent(FlexAlign.SpaceBetween).width('100%')}.layoutWeight(1).alignItems(HorizontalAlign.Start).padding({ left: 10, right: 10 })}.padding(10).alignItems(VerticalAlign.Top).backgroundColor(Color.White)}
}

2.7 点菜布局—右

在这里插入图片描述

import { MTFoodItem } from './MTFoodItem'@Component
export struct MTContentView {categoryList: string[] = ['一人套餐', '特色烧烤', '杂粮主食']@State categoryIndex: number = 0build() {Row() {// 左侧分类...// 右侧食品列表List() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (item: number) => {ListItem() {MTFoodItem()}})}.layoutWeight(1)}.height('100%').width('100%')}
}

2.8 主页面整体布局

在这里插入图片描述

import { MTBottomView } from './components/MTBottomView'
import { MTContentView } from './components/MTContentView'
import { MTTopView } from './components/MTTopView'@Entry
@Component
struct MeiTuanPage {build() {Column() {Stack({ alignContent: Alignment.Bottom }) {Column() {MTTopView()MTContentView()}.width('100%').height('100%').padding({bottom:120})MTBottomView()}}.width('100%').height('100%').backgroundColor('#F6F6F6')}
}

三、小结

  • 组件拆分
  • UI布局

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

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

相关文章

Middle for Mac:简洁高效的文本编辑软件

追求简洁与高效?Middle for Mac将是您文本编辑的最佳选择。这款Mac平台上的文本编辑器,以其独特的魅力和实用的功能,赢得了众多用户的喜爱。 Middle注重用户体验,采用简洁直观的界面设计,让您能够迅速上手并享受高效的…

【设计模式】JAVA Design Patterns——Abstract-document

🔍 目的 使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。 🔍 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

docker学习笔记(五):harbor仓库搭建与简单应用

harbor私有仓库 简介 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管…

组件目录存放问题

目录 一、思考引入 二、组件分类 三、组件分类的目的 一、思考引入 .vue文件本质无区别,而路由相关的组件,为什么要放在views目录呢? 二、组件分类 .vue文件分2类:页面组件和复用组件。注意:都是.vue文件&#xff…

漫画对话 ai翻译

復讐の教科書ーー81 81-1 いい加減吐け!!冴木!! 快说吧!!冴木!! お前が一連の事件の犯人なんだろ!? 你就是连续事件的犯人吧!? だか…

游戏工作室如何利用惯性动作捕捉技术制作动画?

随着动捕设备不断进步和游戏行业的发展,惯性动作捕捉技术在游戏开发领域逐渐普及。惯性动作捕捉技术,可以精准捕捉现实世界中的真人动作,并将其精准应用于虚拟角色上,使游戏中的角色动作可以呈现出更写实、逼真和沉浸感&#xff0…

##10 卷积神经网络(CNN):深度学习的视觉之眼

文章目录 前言1. CNN的诞生与发展2. CNN的核心概念3. 在PyTorch中构建CNN4. CNN的训练过程5. 应用:使用CNN进行图像分类5. 应用:使用CNN进行时序数据预测代码实例7. 总结与展望前言 在深度学习的领域中,卷积神经网络(CNN)已经成为视觉识别任务的核心技术。自从AlexNet在2…

光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型

光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台,光伏设备制造企业可以实现对生产过程的全面监控和智能管理,提高生产效率&#…

基于51单片机的智能导盲手杖—超声波测距

基于51单片机的智能导盲手杖 (仿真+程序原理图+PCB设计报告) 功能介绍 具体功能: 1.显示前方障碍物距离。 2.实时测量距离,并通过蜂鸣器提醒距离过短,蜂鸣器蜂鸣发出预警。 3.可以通过按键调…

吴恩达机器学习笔记:第 9 周-17大规模机器学习(Large Scale Machine Learning)17.1-17.2

目录 第 9 周 17、 大规模机器学习(Large Scale Machine Learning)17.1 大型数据集的学习17.2 随机梯度下降法 第 9 周 17、 大规模机器学习(Large Scale Machine Learning) 17.1 大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好…

【代码随想录】回溯问题之组合

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记,为了之后方便观看 解决的类型问题 组合无序,排列有序 组合切割子集排列(强调元素的顺序)棋牌问题(n皇后,数独&#xff0…

jsbsim 调 pid 记录

1.先调俯仰角 pitch 俯仰角不能超过 xml 文件里定义的爬升角 高度不对,调 pitch 角的 pid,俯仰角 理论上调pid: 响应快了,P调小;响应慢了,P调大 I消除稳态误差,I调大 D防止震荡,震…

AWS Lambda 第一个例子Hello (JAVA)

什么是Serverless(无服务器计算) 行业通常所说的Serverless,主要是指“无服务器计算(Serverless Computing)”。无服务器计算,并不是真的不需要服务器,而是说,对于用户,…

Hadoop3:HDFS的Shell操作(常用命令汇总)

一、简介 什么是HDFS的Shell操作? 很简单,就是在Linux的终端,通过命令来操作HDFS。 如果,你们学习过git、docker、k8s,应该会发现,这些命令的特点和shell命令非常相似 二、常用命令 1、准备工作相关命令…

2024年5月发布的SparkyLinux 8使用的是Debian 13 trixie 的更新源

2024年5月发布的SparkyLinux 8使用的是Debian 13 trixie 的更新源,然后我改了清华对应的更新源,更新成功。纯粹是测试,具体应以官网信息为主。

Elasticsearch 索引、类型、文档、分片与副本等核心概念介绍

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Elasticsearch简介 2、分布式搜索引擎的工作原理…

AlphaFold3(AF3)简单介绍:预测各种生物分子结构和它们之间相互作用的深度学习模型

参考: 文章地址: https://www.nature.com/articles/s41586-024-07487-w https://blog.google/technology/ai/google-deepmind-isomorphic-alphafold-3-ai-model/ AlphaFold3体验官网: https://golgi.sandbox.google.com/ 《Accurate structure prediction of biomolecula…

xxe漏洞漏洞详解

XXE漏洞概念 XXE(XML External Entity Injection) XML外部实体注入。 重点: XML 外部实体 注入 这三部分搞清楚 XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性 的标记语言,可…

Github 2024-05-10 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C++项目2JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star数量:140773 个…

队列和二叉树

本文主要探讨队列和二叉树的相关知识。 队列 队列结构:队头指针指向队头元素,队尾指针指向队尾元素(链表形式或数组形式) 队列特特点:先进先出,对头插入,队尾出队 双端队列:对头队尾都可插入和出队 二叉树 二叉树:包含根节点和子节点,一个三角组内…