鸿蒙仓颉语言开发实战教程:商城搜索页

news2025/6/6 11:21:26

大家好,今天要分享的是仓颉语言商城应用的搜索页。

搜索页的内容比较多,都有点密集恐惧症了,不过我们可以从上至下将它拆分开来,逐一击破。

导航栏

搜索页的的最顶部是导航栏,由返回按钮和搜索框两部分组成,比较简单,具体实现代码如下:

Row(6){
    Image(@r(app.media.back))
    .width(30)
    .height(30)
    .onClick({evet => Router.back()})
    Row{
        Search(value: "", placeholder: "搜索商品")
        .searchButton("搜索")
         .width(100.percent)
        .height(35)
        .borderRadius(4)
        .backgroundColor(0xDDDDDD)
        .placeholderColor(0x000000)
    }
    .height(35)
    .layoutWeight(1)
    .backgroundColor(Color(236, 236, 236, alpha: 1.0))
    .borderRadius(4)
    .justifyContent(FlexAlign.SpaceBetween)
}
.padding( right: 10, left: 10)
.width(100.percent)

历史搜索

大家应该可以看出来这个页面除了导航栏之外其余内容都在List组件里,而且猜你想搜、历史搜索这两个标题样式相同,所以可以使用List组件的header来实现:

@Builder func normalHead(text:String) {
    Row{
        Text(text)
        .fontSize(15)
        .backgroundColor(Color.WHITE)
        .padding(10)
        .fontWeight(FontWeight.Bold)
    }
    .width(100.percent)
    .height(35)
    .alignItems(VerticalAlign.Center)
}

做完标题之后再看历史搜索的内容,这种不规则的排列看起来比较难,其实使用Flex布局就可以轻松实现,然后仔细设置一个Text组件的字体、边框、间距等样式即可,其次大家还是需要继续熟悉仓颉语言中LIst组件的使用和Foreach的写法,具体实现代码如下:

@State var hisList:ArrayList<String> = ArrayList<String>(['毛巾','衬衫','男士牛仔裤','一次性塑料盆','可乐啊','茶壶','保温壶','指甲刀','polo衫','超级智能手机'])

ListItemGroup(ListItemGroupParams(header:{=>bind(this.normalHead,this)('历史搜索')})){
    ListItem{
        Flex(FlexParams(direction: FlexDirection.Row, wrap: FlexWrap.Wrap)){
            ForEach(hisList, itemGeneratorFunc: {str:String,index:Int64 =>
             Text(str)
            .margin(left:5,top:5)
            .padding(left:6,right:6,top:4,bottom:4)
            .fontSize(12)
            .fontColor(0x4a4a4a)
            .border(width: Length(1, unitType: LengthType.vp), color: Color(216, 216, 216, alpha: 1.0 ), radius: Length(4, unitType: LengthType.vp), style: BorderStyle.Solid)
                        })
        }
        .width(100.percent)
        .padding( right: 10, left: 10)
    }
}

猜你想搜

猜你想搜部分比历史搜索要简单一些,而且标题我们已经写过了,内容部分只要将每个text组件的宽度设置50%就能实现两列的效果,实现代码如下:

@State var guessList:ArrayList<String> = ArrayList<String>(['水晶粽子','男士轻薄裤子','超好看Polo衫','超智能手机','超快洗衣机','茶壶','实木家具窗'])

ListItemGroup(ListItemGroupParams(header:{=>bind(this.normalHead,this)('猜你想搜')})){
    ListItem{
        Flex(FlexParams(direction: FlexDirection.Row, wrap: FlexWrap.Wrap)){
            ForEach(hisList, itemGeneratorFunc: {str:String,index:Int64 =>
                 Text(str)
                 .margin(top:5)
                 .fontSize(15)
                 .fontColor(0x4a4a4a).width(50.percent)
                        })
        }
        .width(100.percent)
        .padding( right: 10, left: 10)
    }
}

热搜

热搜部分是这个页面最难的内容了,它两个部分都可以滑动但又是不同的滑动方式,标题部分可以自由滑动,而内容列表左右滑动时是分页的,所以标题部分使用Scroll容器,内容部分使用Swiper容器,这两部分还有联动效果。

先看标题部分的具体代码,我依然把它视作List组件的Head:

@Builder func hotHead(text:String) {
     Scroll(this.scroller){
        Row(30){
            ForEach(this.hotTypeList, itemGeneratorFunc: {str:String,index:Int64 =>
                        if(this.hotIndex == index){
                             Text(str)
                             .fontSize(15)
                             .fontWeight(FontWeight.Bold)
                             .fontColor(Color.RED)
                        }else {
                          Text(str)
                            .fontSize(15)
                             .fontColor(Color.GRAY)
                        }
                        
		})
        }
    }
    .height(45)
    .padding( right: 12, left: 12)
    .scrollable(ScrollDirection.Horizontal)
    .scrollBar(BarState.Off)
    
}

然后是热搜内容列表,这是我们第一次在仓颉语言中遇到Swiper容器,它有一些小小的坑,首先我暂时没找到隐藏控制圆点的属性,还有它代码控制翻页只支持上一页和下一页,无法通过按钮点击自由的翻页。所以这里我并没有给标题添加点击事件,只写了内容列表向标题列表的单向联动:

ListItemGroup(ListItemGroupParams(header:{=>bind(this.hotHead,this)('')})){
    ListItem{
        Swiper(swiperController){
              ForEach(hotTypeList, itemGeneratorFunc: {str:String,index:Int64 =>
                        Column{
                             ForEach(hotContentList, itemGeneratorFunc: {str:String,index:Int64 =>
                                    Row{
                                        Row(10){
                                         Text((index + 1).toString())
                                         .fontWeight(FontWeight.Bold)
                                         .fontSize(16)
                                         .fontColor(Color.BLACK)
                                        Text(str)
                                         .fontSize(16)
                                         .fontColor(Color.BLACK)
                                         }
                                    
                                        Text('热度100万')
                                    .fontColor(Color.GRAY)
                                    .fontSize(14)
                                    }
                                    .width(100.percent)
                                     .height(48)
                                .justifyContent(FlexAlign.SpaceBetween)
                                    })
                        }
                        })
        }
        .padding( right: 12,  left: 12)
        .onChange( {
             index => this.hotIndex = Int64(index)
     })
    }
}

以上就是商城搜索页的相关内容。#HarmonyOS语言##仓颉##购物#

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

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

相关文章

图像去雾数据集总汇

自然去雾数据集 部分的数据清洗可以看这里&#xff1a;图像去雾数据集的下载和预处理操作 RESIDE-IN 将ITS作为训练集&#xff0c;SOTSindoor作为测试集。训练集13990对&#xff0c;验证集500对。 目前室内sota常用&#xff0c;最高已经卷到PSNR-42.72 最初应该是dehazefo…

网络攻防技术十四:入侵检测与网络欺骗

文章目录 一、入侵检测概述二、入侵系统的分类三、入侵检测的分析方法1、特征检测&#xff08;滥用检测、误用检测&#xff09;2、异常检测 四、Snort入侵检测系统五、网络欺诈技术1、蜜罐2、蜜网3、网络欺骗防御 六、简答题1. 入侵检测系统对防火墙的安全弥补作用主要体现在哪…

C++笔记-C++11(一)

1.C11的发展历史 C11 是 C 的第⼆个主要版本&#xff0c;并且是从 C98 起的最重要更新。它引⼊了⼤量更改&#xff0c;标准化了既有实践&#xff0c;并改进了对 C 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前&#xff0c;⼈们曾使⽤名称“C0x”&#xff0c;…

JVM 类初始化和类加载 详解

类初始化和类加载 类加载的时机 加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的&#xff0c;类型的加载过程必须按照这种顺序按部就班地开始&#xff0c;而解析阶段则不一定&#xff1a;它在某些情况下可以在初始化阶段之后再开始&#xff08;懒解析&#xff09;&am…

B站缓存视频数据m4s转mp4

B站缓存视频数据m4s转mp4 结构分析 结构分析 在没有改变数据存储目录的情况下&#xff0c;b站默认数据保存目录为&#xff1a; Android->data->tv.danmaku.bili->download每个文件夹代表一个集合的视频&#xff0c;比如&#xff0c;我下载的”java从入门到精通“&…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【机器学习】主成分分析 (PCA)

目录 一、基本概念 二、数学推导 2.1 问题设定&#xff1a;寻炸最大方差的投影方向 2.2 数据中心化 2.3 目标函数&#xff1a;最大化投影后的方差 2.4 约束条件 2.5 拉格朗日乘子法 ​编辑 2.6 主成分提取 2.7 降维公式 三、SVD 四、实际案例分析 一、基本概念 主…

二叉树-104.二叉树的最大深度-力扣(LeetCode)

一、题目解析 这里需要注意根节点的深度是1&#xff0c;也就是说计算深度的是从1开始计算的 二、算法原理 解法1&#xff1a;广度搜索&#xff0c;使用队列 解法2&#xff1a;深度搜索&#xff0c;使用递归 当计算出左子树的深度l&#xff0c;与右子树的深度r时&#xff0c;…

物料转运人形机器人适合应用于那些行业?解锁千行百业的智慧物流革命

当传统物流设备困于固定轨道&#xff0c;当人力搬运遭遇效率与安全的天花板&#xff0c;物料转运人形机器人正以颠覆性姿态重塑产业边界。富唯智能凭借GRID大模型驱动的"感知-决策-执行"闭环系统&#xff0c;让物料流转从机械输送升级为智慧调度——这不仅是工具的革…

时序预测模型测试总结

0.背景描述 公司最近需要在仿真平台上增加一些AI功能&#xff0c;针对于时序数据&#xff0c;想到的肯定是时序数据处理模型&#xff0c;典型的就两大类&#xff1a;LSTM 和 tranformer 。查阅文献&#xff0c;找到一篇中石化安全工程研究院有限公司的文章&#xff0c;题目为《…

第四十五天打卡

知识点回顾&#xff1a; tensorboard的发展历史和原理 tensorboard的常见操作 tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&#xff0c;用tensor…

springboot mysql/mariadb迁移成oceanbase

前言&#xff1a;项目架构为 springbootmybatis-plusmysql 1.部署oceanbase服务 2.springboot项目引入oceanbase依赖&#xff08;即ob驱动&#xff09; ps&#xff1a;删除原有的mysql/mariadb依赖 <dependency> <groupId>com.oceanbase</groupId> …

npm install 报错:npm error: ...node_modules\deasync npm error command failed

npm install 时报错如下&#xff1a; 首先尝试更换node版本&#xff0c;当前node版本20.15.0&#xff0c;更换node版本为16.17.0。再次执行npm install安装成功

Filebeat收集nginx日志到elasticsearch,最终在kibana做展示(二)

EFK 项目需求是要将 一天或15分钟内 搜索引擎抓取网站次数做个统计&#xff0c;并且 如 200 301 404 状态码 也要区分出来, 访问 404 报错的 url 也要截取出来 前期 收集数据 看这篇文章&#xff0c;点击跳转 收集数据完成之后&#xff0c;使用下面方法做展示 创建一个 仪表…

halcon c# 自带examples报错 Matching

最近开始学习halcon与C#的联合编程&#xff0c;打开Matching例程时遇到了下面的问题 “System.TypeInitializationException”类型的未经处理的异常在 halcondotnet.dll 中发生 “HalconDotNet.HHandleBase”的类型初始值设定项引发异常。 System.TypeInitializationExceptio…

服务器重启后配置丢失怎么办?

服务器重启后配置丢失是一个常见问题&#xff0c;特别是在云服务器或容器环境中&#xff0c;若未正确保存或持久化配置&#xff0c;系统重启后就会恢复默认状态。下面是问题分析 解决方案&#xff1a; &#x1f9e0; 一、常见原因分析 原因描述❌ 配置保存在临时目录如 /tmp、…

湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务

一、债务优化的法律逻辑与生活平衡 在债务重组领域&#xff0c;专业机构需同时解决两个核心问题&#xff1a; 法律合规性&#xff1a;依据《民法典》第680条、第671条&#xff0c;对高息债务进行合法性审查&#xff1b; 生活可持续性&#xff1a;根据债务人收入设计分期方案…

Springboot——整合websocket并根据type区别处理

文章目录 前言架构思想项目结构代码实现依赖引入自定义注解定义具体的处理类定义 TypeAWebSocketHandler定义 TypeBWebSocketHandler 定义路由处理类配置类&#xff0c;绑定point制定前端页面编写测试接口方便跳转进入前端页面 测试验证结语 前言 之前写过一篇类似的博客&…

Qiskit:量子计算模拟器

参考文献&#xff1a; IBM Qiskit 官网Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子计算&#xff1a;基本概念常见的几类矩阵&#xff08;正交矩阵、酉矩阵、正规矩阵等&#xff09;Qiskit 安装指南-博客园使用Python实现量子电路模拟&#x…

龙虎榜——20250605

上证指数放量收阳线&#xff0c;个股涨跌基本持平&#xff0c;日线持续上涨。 深证指数放量收阳线&#xff0c;日线持续上涨。 2025年6月5日龙虎榜行业方向分析 1. 通信设备 代表标的&#xff1a;生益电子、三维通信、瑞可达 驱动逻辑&#xff1a;5.5G商用牌照发放预期加速&…