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注重用户体验,采用简洁直观的界面设计,让您能够迅速上手并享受高效的…

204. 计数质数

Problem: 204. 计数质数 文章目录 思路解题方法复杂度Code 思路 这个问题的关键是找出小于n的所有质数。质数是只有两个正因数(1和它自身)的自然数,且必须大于1。 解题方法 我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes&a…

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

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

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

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

组件目录存放问题

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

【八股系列】React中props和state的区别是什么?

React中props和state的区别是: props是用来从父组件向子组件进行传递数据的,在子组件中可以用props来接收到父组件传递过来的参数。props是不可变的,用户不能在子组件中修改props的值,因为从父组件中传递过来的值被认为是不可变数…

HJ19 简单错误记录

问题概要 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 对应牛客网题目HJ19 简单错误记录 思路分析 其实这个题目并没有用到特别复杂的技巧,重点是对字符串的处理,以及模拟整个记录的过程。 代码实现 #include…

漫画对话 ai翻译

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

400G QSFP-DD光模块的分类及应用领域

400G QSFP-DD光模块是一种光通信设备,具有高带宽和高密度的特点,适用于各种数据中心和通信网络。本文将介绍400G QSFP-DD光模块的分类和应用领域。 400G QSFP-DD光模块的分类 400G QSFP-DD光模块可以根据其传输速率、光纤类型和工作距离等因素进行分类。…

SpringBoot的启动器——Spring-boot-starter介绍和常见启动器

1、Starter是什么 Spring Boot通过将我们常用的功能场景抽取出来,做成的一系列的启动器,我们只需要在项目中引入这些starter,相关的所有依赖就会全部被导入进来,并且我们可以抛弃繁杂的配置,例如: ​ spri…

探索Java的未来:创新与演进的旅程

探索Java的未来:创新与演进的旅程 Java,这个被誉为“一次编写,到处运行”的编程语言,自1995年诞生以来,一直以其跨平台性、面向对象和强大的安全性而著称。随着技术的不断进步和市场的不断变化,Java也在不…

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

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

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

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

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

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

ESP32-C3模组上跑通MQTT(4)

接前一篇文章:ESP32-C3模组上跑通MQTT(3) 本文内容参考: 《ESP32-C3 物联网工程开发实战》 特此致谢! 上一回讲到了MQTT的消息格式,讲解了MQTT控制报文中的固定头中的控制报文的类型、消息质量等级和标志…

基于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 大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好…

ubantu安装rabbbitmq

ubantu安装rabbbitmq 安装Erlang1、在linux下直接安装2、上传Erlang文件后解压 安装rabbitmq开启web管理接口创建用户及修改guest密码,删除guest默认账号 安装Erlang 1、在linux下直接安装 #运行以下命令直接安装: sudo apt-get install erlang#可运行…

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

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

postgres 查看全部数据库

在 PostgreSQL 中,要查看所有的数据库,你可以使用 psql 命令行工具并执行一个特定的命令。以下是查看所有数据库的步骤: 打开终端: 首先,打开你的终端或命令行界面。 连接到 PostgreSQL: 使用 psql 连接到…