鸿蒙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可视化开发平台
随机推荐
- 微信分享前端开发全程详解含iOS、安卓、H5、ReactNative以及微信开放标签的适配和使用
2024年9月,本人在做微信分享前端部分的iOS.安卓和H5的页面和功能时踩了不少坑,于是写了这篇文章,内容包括微信分享在上面三个端的技术点和坑点.解决办法,微信开放标签的相关适配,以及ReactNa ...
- day:3软件测试分类
一.按开发阶段划分 (1)单元测试 (2)集成测试 (3)系统测试 (4)验收测试 二.按查看代码分类 (1)黑盒测试 定义:是一种功能测试,测试中把测试的软件当成一个盒子,不关心盒子内部结构是什么, ...
- Deepseek学习随笔(3)--- 高效提问技巧
明确需求 在与 DeepSeek 互动时,明确需求是获取高质量回复的关键.以下是一些示例: 错误示例:帮我写点东西 这样模糊的指令无法让 DeepSeek 理解你的具体需求,生成的回复可能无法满足你的 ...
- 如何用爱思助手给苹果iPhone手机免越狱修改虚拟定位教程
使用爱思助手修改定位的方法: 1.在电脑上下载安装 爱思助手 客户端,并更新到最新版,用数据线将苹果移动设备连接到电脑. 2.连接成功后,依次打开爱思助手"工具箱 - 虚拟定位". ...
- Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost
前言:"Featurewiz-Polars"是一个用于特征工程的 Python 库,结合了特征选择和特征生成的功能.它基于"Polars",这是一个高性能的 D ...
- Twain Capabilities属性
Asynchronous Device Events 异步设备事件 CAP_DEVICEEVENT MSG_SET选择应用程序希望Twain源报告的事件; MSG_RESET返回Twain源的首选设置 ...
- PHP中处理html相关函数集锦
1.html_entity_decode() 函数把 HTML 实体转换为字符. Html_entity_decode() 是 htmlentities() 的反函数. 例子: <?Php $s ...
- linux php重启
1.停止命令 你可以先查看自己的php进程有没有启动 ps -ef | grep php [root@iZ6we4yxap93y2r0clg3g8Z ~]# ps -ef | grep php roo ...
- windows 10 平台使用命令行批量获取一个文件夹下所有文件的路径
1 打开命令行, 定位路径到指定磁盘 2 使用cd命令定位到指定路径 3 输入以下命令, 想要的结果就保存在了filename.txt中 dir /b/s filename.txt 结果:
- 2025年3月GESP八级真题解析
第一题--上学 题目描述 C 城可以视为由 \(n\) 个结点与 \(m\) 条边组成的无向图.这些结点依次以 \(1,2,-,n\) 标号,边依次以 \(1,2,-,m\) 标号.第 \(i\) 条 ...