首页 > 其他分享 >鸿蒙NEXT开发实战教程—小红书app

鸿蒙NEXT开发实战教程—小红书app

时间:2024-12-27 15:30:33浏览次数:3  
标签:width 小红书 Text app NEXT Color fontSize item fontColor

幽蓝君最近发现小红书是个好东西,一定要多逛

图片

今天就浅浅模仿一下小红书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%')

标签:width,小红书,Text,app,NEXT,Color,fontSize,item,fontColor
From: https://www.cnblogs.com/youlanjihua/p/18635890

相关文章

  • 通过在 组策略管理控制台 中配置 AppLocker,可以非常有效地限制 PowerShell 脚本的执行
    在组策略管理控制台(GroupPolicyManagementConsole,GPMC)中配置AppLocker,可以有效地限制和控制哪些应用程序(包括PowerShell脚本)可以在计算机上执行。这是一种通过白名单策略确保只有已批准的应用程序能够运行的强大安全措施。配置AppLocker的步骤:1. 打开组策略管理控制......
  • 四款简洁又好用的日记app推荐
    以前使用纸质的笔记本来写日记,但是最近几年再也没有写过日记了,最近又想要开始写日记,发现用日记本app会更加简单方便。打开手机就能给直接记录,除了记录文字,还可以保存图片、语音、视频等,更加简单便捷!1、念念手帐优点:画风可爱,很适合喜欢可爱风格的女生。可以写笔记,记录图篇和文字......
  • 长尾应用(Long-tail applications)
    “长尾应用”(Long-tailapplications)是指需求量较小、使用频率较低,但在整体市场中仍然占据一定重要地位的应用或服务。这个术语来源于“长尾理论”,该理论指出:在许多领域,需求少但数量多的产品或服务加在一起,其市场份额可能与甚至超过头部热门产品。长尾应用的特征低需求频率:......
  • 鸿蒙Next简易版本通用头部导航栏开发
    鸿蒙Next简易版本通用头部导航栏开发在日常页面开发中,我们每个页面都会有一个头部用于展示返回按钮和显示页面信息。如果没个页面都重复写太过于繁琐以及标准不好统一。因此,我们需要一个通用的头部组件。步骤一新建一个ArkTsFile页面,使用@Component装饰器创建一个名为NavBar的......
  • HarmonyOS NEXT开发实战:打造高效上拉刷新与下拉加载组件(一)空页面的设计与实现
    本文正在参加华为鸿蒙有奖征文征文活动前言:在鸿蒙开发的世界中,用户体验至关重要。我在网络上搜寻了一番,发现现有的上拉刷新和下拉加载组件要么功能不全,要么不够优雅。因此,我决定自己动手,打造一套既美观又实用的组件。本系列文章将深入解析如何使用鸿蒙系统组件封装出优秀的上拉......
  • HarmonyOS NEXT开发实战:实现高效下拉刷新与上拉加载组件(二)刷新核心逻辑与空页面集成
    前言:在上一篇文章中,我们深入探讨了如何在HarmonyOS中实现一个功能完备的空页面组件。现在,我们将进入下拉刷新和上拉加载功能的核心逻辑实现。这不仅仅是技术实现,更是对用户体验的深刻理解。本文将详细介绍如何将空页面与下拉刷新、上拉加载逻辑相结合,打造一个既高效又用户友好的......
  • uni-app中小程序地图展示具体的位置以及如何获取移动端天气的温度展示
    移动端展示具体的位置比如悦来广场国贸大厦,,利用的腾讯地图的相关接口,参考地址:https://lbs.qq.com/service/webService/webServiceGuide/webServiceGcoder具体代码如下:uni.getLocation({type:'gcj02',success:function(res){varlon2=res.longitude;//经度......
  • 鸿蒙Next状态管理V2 - @Once初始化用法总结
    一、概述@Once装饰器用于实现变量仅在初始化时同步一次外部传入值,后续数据源更改时不会将修改同步给子组件。其必须搭配@Param使用,且不影响@Param的观测能力,仅拦截数据源变化,与@Param装饰变量的先后顺序不影响实际功能,并且在搭配使用时可在本地修改@Param变量的值。二、装饰器使......
  • 基于SpringBoot+Vue+Uniapp的公开课管理小程序(毕业设计/课程设计源码+论文+部署)
    文章目录前言文档图(系统结构图、ER图、用例图等)详细视频演示本系统运行效果图后台管理技术框架后端采用SpringBoot框架前端框架Vue选题推荐(部分)成品项目展示(部分)系统测试系统测试的目的系统功能测试代码参考为什么选择我?获取源码前言......
  • 基于Uniapp + SpringBoot + Vue的酒店管理APP(毕业设计/课程设计源码+论文+部署)
    文章目录前言文档图(系统结构图、ER图、用例图等)详细视频演示本系统运行效果图后台管理技术框架后端采用SpringBoot框架前端框架Vue选题推荐(部分)成品项目展示(部分)系统测试系统测试的目的系统功能测试代码参考为什么选择我?获取源码前言......