首页 > 其他分享 >HarmonyOS NEXT开发实战教程—淘宝搜索页

HarmonyOS NEXT开发实战教程—淘宝搜索页

时间:2024-12-14 09:34:17浏览次数:5  
标签:index 教程 width NEXT HarmonyOS fontSize str fontColor Row

今天忙里偷闲,分享一个淘宝搜索页实现过程,先上效果图:

 

图片

 

界面部分比较简单,大体分为导航栏、历史搜索、猜你想搜和热搜榜几个部分,历史搜索采用用户首选项进行存储数据。

导航栏部分相关代码如下:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,alignItems:ItemAlign.Center}){  Image($r('app.media.back'))    .width(30)    .height(30)    .objectFit(ImageFit.Contain)  Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,alignItems:ItemAlign.Center}){      TextInput({placeholder:'长款羽绒服',text:this.searchText})        .width('100%')        .placeholderColor(Color.Gray)        .fontSize(14)        .backgroundColor('rgb(226,226,226)')        .enterKeyType(EnterKeyType.Search)        .onChange((str)=>{          this.searchText = str        })        .onSubmit(()=>{          this.saveHistory(this.searchText)          this.searchText = ''        })    Image($r('app.media.scan'))      .width(22)      .height(22)      .margin({left:5})      .constraintSize({minWidth:22})      .objectFit(ImageFit.Contain)    Text('搜索')      .width(60)      .height(28)      .backgroundColor(Color.Orange)      .borderRadius(4)      .fontColor(Color.White)      .textAlign(TextAlign.Center)      .fontSize(12)      .margin({left:5})  }  .padding({left:5,right:5})  .width('100%')  .height(34)  .backgroundColor('rgb(226,226,226)')  .borderRadius(8)  .margin({left:5})}.padding({left:10,right:10}).width('100%').backgroundColor(Color.White).height(45)

历史搜索部分采用Flex布局实现:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap}){  ForEach(this.hisList,(str:string,index)=>{    Text(str)      .fontColor('#4a4a4a')      .fontSize(12)      .padding({left:6,right:6,top:4,bottom:4})      .borderWidth(1)      .borderColor('rgb(216,216,216)')      .borderStyle(BorderStyle.Solid)      .margin({left:5,top:5})      .textAlign(TextAlign.Center)      .borderRadius(4)  })}

猜你想搜部分,同样使用Flex布局:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap}){  ForEach(this.guessList,(str:string,index)=>{    Text(str)      .fontColor('#4a4a4a')      .fontSize(15)      .margin({top:6})      .width('50%')  })}

热搜榜部分使用一个Scroll和一个Swiper实现联动效果:

Column(){  Scroll(this.scrollController){    Row({space:30}){      ForEach(this.hotTitleList,(str:string,index)=>{        Text(str)          .fontSize(15)          .fontColor(this.hotIndex == index?Color.Orange:Color.Gray)          .fontWeight(this.hotIndex == index?FontWeight.Bold:FontWeight.Normal)          .onClick(()=>{            this.hotIndex = index            this.swiperController.changeIndex(this.hotIndex,true)          })      })    }    .height(45)    .alignItems(VerticalAlign.Center)  }  .scrollable(ScrollDirection.Horizontal)  .scrollBar(BarState.Off)  .width('100%')  Swiper(this.swiperController){    ForEach(this.hotTitleList,(str:string,index)=>{      Column(){        ForEach(this.hotContentList,(str:string,index)=>{          Row(){            Row(){              Text((index+1).toString())                .fontSize(15)                .fontColor('#4a4a4a')                .fontWeight(FontWeight.Bold)                .width(40)                .textAlign(TextAlign.Center)              Text(str)                .fontSize(15)                .fontColor('#4a4a4a')            }            Text('热度100万')              .fontSize(12)              .fontColor(Color.Gray)          }          .width('100%')          .height(40)          .justifyContent(FlexAlign.SpaceBetween)          .alignItems(VerticalAlign.Center)          .borderRadius(10)          .margin({top:8})          .linearGradient({            angle: 90,            colors: [[index<3?0xfff8f3:0xf9f9f9, 0.0], [index<4?0xfffbfa:0xfcfcfc, 0.4], [0xffffff, 1.0]]          })        })      }      .width('100%')      .alignItems(HorizontalAlign.Start)    })  }  .vertical(false)  .indicator(false)  .loop(false)  .onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {    this.hotIndex = index    console.info("index: " + index)    console.info("current offset: " + extraInfo.currentOffset)    const xOffset: number = this.scrollController.currentOffset().xOffset;    this.scrollController.scrollTo({ xOffset: index*70, yOffset: 0 })  })}

 

标签:index,教程,width,NEXT,HarmonyOS,fontSize,str,fontColor,Row
From: https://www.cnblogs.com/youlanjihua/p/18606353

相关文章

  • 码支付支付宝免挂手动配置通道详细教程
    码支付地址码支付-码支付官网(pay.yizhifu.top)-三网免挂码支付,码支付授权官网,聚合支付,易支付官网,源支付,即时到账支付接口,免签约支付,虎皮椒支付码支付官网(pay.yizhifu.top)是集成微信支付、支付宝支付、QQ钱包支付等多场景聚合支付接口的平台,保障每位商户资金即时到账;解决个人开......
  • 在CodeBolcks+Windows API下的C++编程教程——给你的项目中添加头文件和菜单
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • 剪映破解版、剪映 VIP 版本下载安装教程,亲测有效
    大家好!今天要给各位小伙伴们安利一款我亲测超好用的视频剪辑工具——剪映!更劲爆的是,这里推荐的还是剪映破解版——支持永久VIP功能,完全免费,真的爱不释手!对于我们这些天天和视频打交道的UP主来说,这简直是创作道路上的一盏明灯!链接地址:https://pan.quark.cn/s/ce0be681b9a5链......
  • 信息收集利器Shodan教程——Shodan(2)
    Shodan(2)批量查找并验证漏洞CVE-2019-0708原理存在漏洞的远程桌面服务器,在接收到特殊数据包时会释放一个内部信道MST120的控制结构体,但并未将指向该结构体的指针删除。内部信道:定义:内部信道通常指的是在一个设备、系统或网络内部用于信息传输的通道。分类:逻......
  • 五阶魔方教程
    初学五阶魔方首先,请先看过之前的四阶魔方教学,或者其它类似转法的网页,因为接下来的内容全是建立在魔方的概念上然后加以延伸。同样的,这个教学只介绍能够解出所需最容易的方法,并称不上非常有效率。 1.完成中心五阶是奇数层,中心是固定的,所以没有四阶中心定位错误的问题。拼中心......
  • 在CodeBolcks+Windows API下的C++编程教程——给你的项目中添加资源文件和图标
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • php.ini 文件上传/执行时间/部分配置新手教程
    1、上传文件大小配置一般需要同时配置“upload_max_filesize”、“post_max_size”,配置格式如下:file_uploads=On;是否允许HTTP文件上传upload_max_filesize=2M;设置单个文件上传的最大尺寸post_max_size=8M;设置POST请求体的最大尺寸,包括所有表单数据2、脚本最......
  • Spring Boot教程之二十五: 使用 Tomcat 部署项目
    SpringBoot–使用Tomcat部署项目SpringBoot是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。SpringBoot建立在Spring之上,包含Spring的所有功能。如今,它正成为开发人员的最爱,因为它是一个快速可用于生产的环境,使开发人员能够直接专注于逻辑......
  • Spring Boot教程之二十七:Thymeleaf 示例
    SpringBoot–Thymeleaf示例Thymeleaf是一个基于Java的服务器端模板引擎,适用于Web和独立环境,能够处理HTML、XML、JavaScript、CSS甚至纯文本。它比JPS更强大,负责在UI上呈现动态内容。该引擎允许后端和前端开发人员在同一视图上并行工作。它可以直接访问Java对......
  • 靶场搭建教程
    目录搭建Vulhub搭建Pikachu搭建DVWA一、搭建Vulhub搭建环境:kali1.1首先安装Docker更新软件::::warningapt-getupdate:::1.2安装HTTPS协议和CA证书::::warningaptinstalldocker.io:::1.3验证docker是否安装成功#查看docker的版本docker-v#启动d......