鸿蒙NEXT开发实战教程—小红书app
幽蓝君最近发现小红书是个好东西,一定要多逛
今天就浅浅模仿一下小红书app,主要是底部tab栏和主页部分。

首先看一下tabbar,由于中间有一个红色按钮的存在,所以这里我使用自定义导航栏来实现,自定义的实现逻辑是在本来app的上层叠加一层自定义tabbar,使用监听index的变化来改变tababr的状态,具体实现代码如下:
Column(){
if(!this.tabItem.middleMode){
Text(this.tabItem.title)
.fontSize(16)
.fontWeight(FontWeight.Bold)
.fontColor(this.isSelected ? '#000000' : '#B7B7B7')
}else {
Text('+')
.fontSize(30)
.width(50)
.height(30)
.backgroundColor(Color.Red)
.fontColor(Color.White)
.textAlign(TextAlign.Center)
.lineHeight(30)
}
}.backgroundColor(Color.White).width("100%").height(56).justifyContent(FlexAlign.Center)
Flex(){
ForEach(this.tab,(item:YLTabClass,index:number)=>{
YLTabbarItem({tabItem:item,isSelected:this.currentIndex === index})
.onClick(()=>{
if(index != 2){
this.currentIndex = index
}
this.tabItemClick(index);
})
})}
然后来到主页部分,最上面是一个导航栏,这个导航栏使用系统的Navigation就可以实现,需要注意的地方是导航栏上有带角标的按钮,这个按钮在很多地方都有出现,比如tabbar上等等,所以把它抽出来做一个单独的组件:
Stack({alignContent:Alignment.TopEnd}){
Text(this.title)
.fontColor(this.isSelect?Color.Black: Color.Gray)
.fontSize(17)
.fontWeight(FontWeight.Bold)
if(this.badge > 0){
Text(this.badge.toString())
.width(16)
.height(16)
.fontSize(12)
.textAlign(TextAlign.Center)
.backgroundColor(Color.Red)
.fontColor(Color.White)
.borderRadius(8)
.margin({right:-10,top:-4})
}}.padding(10)
接下来是分类频道部分,这一部分比较简单,使用一个scroll组件就能实现:
Scroll(){
Row({space:20}){
ForEach(this.scrollTitleList,(str:string,index)=>{
Text(str)
.fontSize(16)
.fontColor(Color.Gray)
})
}}.scrollable(ScrollDirection.Horizontal).scrollBar(BarState.Off).width('100%')
最后主要内容部分是一个瀑布流,瀑布流看起来比较难,其实它和普通网格组件唯一的不同点是每一个图片的尺寸不同,瀑布流的相关代码如下:
WaterFlow() { LazyForEach(this.dataSource, (item: number) => { FlowItem() { Column() { Image('/pages/img/img' + item % 5 + '.jpg') .objectFit(ImageFit.Fill) .width('100%') .height(this.itemHeightArray[item % 100]) Text('和闺蜜在一起能长寿 ') .fontColor(Color.Black) .fontSize(15) .margin({top:6}) Row(){ Row(){ Image($r('app.media.header')) .width(20) .height(20) .backgroundColor(Color.Gray) .borderRadius(10) Text('这里是昵称') .fontColor(Color.Gray) .fontSize(13) .margin({left:4}) } .alignItems(VerticalAlign.Center) Text('3233') .fontColor(Color.Gray) .fontSize(13) } .margin({top:6}) .width('100%') .alignItems(VerticalAlign.Center) .justifyContent(FlexAlign.SpaceBetween) } .alignItems(HorizontalAlign.Start) } .width('100%') }, (item: string) => item)}.padding({left:5,right:5}).columnsTemplate("1fr 1fr").columnsGap(8).rowsGap(5).backgroundColor(Color.White).width('100%').height('100%')
鸿蒙NEXT开发实战教程—小红书app的更多相关文章
- 超实用教程,教你用墨刀做出小红书app原型
一个新手怎么用1小时快速学会APP原型设计? 1小时很短,这意味着学习时必须把握APP原型设计中的重点.难点,而非面面俱到. 要在短时间内理解.掌握一个工具的使用,最有效的方式莫过于临摹: 看实例视频 ...
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- 使用Vue2完成“小红书” app
小红书项目说明 整体页面格调.功能和原版 app 无限接近.具体页面细节可以下载 “小红书” app查看. 图片素材:https://pan.baidu.com/s/1qYOcx7e 整体要求: · ...
- 6.简单提取小红书app数据(简单初步试采集与分析)-1
采集小红书数据爬虫:1.本来是要通过app端的接口去直接采集数据,但是app接口手机端设置本地代理这边开启抓包后就不能正常访问数据.所以就采用了微信小程序里的小红书app接口去采集数据. 2.通过 f ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建
上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...
- 微信小程序-云开发实战教程
微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...
- Python开发实战教程(8)-向网页提交获取数据
来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- HTML5 App商业开发实战教程 基于WeX5可视化开发平台
随机推荐
- github上文件过大无法推送问题
GitHub 对文件大小有限制,超过 100 MB 的文件无法直接推送到仓库中. 解决思路: 使用 Git Large File Storage (Git LFS) 来管理大文件 不上传对应的大文件 ...
- KUKA库卡机器人保养维修
KUKA机器人由机械手和控制柜组成,每日机器人保养包括:控制箱.教导盒.手腕之表面擦拭,还有噴槍之清洁. KUKA机器人控制柜保养1)断掉控制柜的所有供电电源.2)检查主机板.存储板.计算板.以及驱动 ...
- Deepseek学习随笔(3)--- 高效提问技巧
明确需求 在与 DeepSeek 互动时,明确需求是获取高质量回复的关键.以下是一些示例: 错误示例:帮我写点东西 这样模糊的指令无法让 DeepSeek 理解你的具体需求,生成的回复可能无法满足你的 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 27 期(2025年2.17-2.23)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 【ARM+Qt+OpenCV】基于ARM的双目图像采集系统
点击查看代码 系统使用ARM处理器,运行linux系统,Qt创建工程编写主程序,可以使用OpenCV进行图像处理. 通过两个摄像头采集会图像,在LCD上进行显示,然后通过LCD上的按钮实现退出程序.保 ...
- wordpress:nginx负载均衡+nignweb服务器+mysql数据库+nfs-lsync+rsync备份
目录 所有知识结合,注意正式环境慎用: mariadb服务器 NFS服务器配置 web服务器配置 Nginx负载均衡 backup备份服务器配置rsync NFS服务器安装lsync进行实时同步 所有 ...
- 基础指令:mkdir、ls、cd、pwd、touch、rm、mv、cp、echo、cat、关机与重启
目录 1. 创建目录 2. 查看目录内容 3. 进入指定目录(传送) 4. 显示当前所在位置 5. 创建文件 6. 删除文件或目录 7. 移动文件 8. 复制文件或目录 9. echo输出信息到屏幕 ...
- oracle 数据库服务名怎么查
WINDOWS上,直接看 服务里的 服务名就好:Oracle SID Service ,中间的SID就是数据库服务的名称.LINUX系统下,输入env |grep SID 可以查看到,一般没换都是这个 ...
- Python进阶知识:多进程/多线程/装饰器
本文写作于2025.3.20,恰好作者正好在外面实习,于此同时在实际工作中遇到这些知识点,因此就进行一个简短汇总方便后续回顾,内容同步更新(显示问题可以直接看):https://www.big-yel ...
- 【Ubuntu】安装OpenSSH启用远程连接
[Ubuntu]安装OpenSSH启用远程连接 零.安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server 壹.启动服务 使用如下代码启动Op ...