首页 > 其他分享 >鸿蒙开发教程主页tab带未读数

鸿蒙开发教程主页tab带未读数

时间:2024-10-17 09:47:20浏览次数:3  
标签:index 读数 鸿蒙 color app item tab 带未

鸿蒙开发教程主页tab带未读数

鸿蒙的主页tab比Android的还要简单些,系统有直接提供

一、思路:

用Tabs和TabContent组件

二、效果图:

在这里插入图片描述

三、关键代码:
@Entry
@Component
struct Index {
  @State selectedIndex: number = 0
  //首页未读数
  @State unreadNumHome: string = '1'
  //发现未读数
  @State unreadNumDiscovery: string = ''
  //动态未读数
  @State unreadNumMood: string = '-1'
  //消息未读数
  @State unreadNumMsg: string = '6'
  //我的未读数
  @State unreadNumMine: string = ''

  @Builder
  TabBottom(item: TabItem, index: number) {
    Column() {
      // 发现在TabBottom传值改变不了,就用要显示未读数加上位置判断,用if else显示组件,这样不用算badge的size
      // 规则:字符串’-1‘代表的是红点,其他字符串数字为数字红点
      if ((isNotEmptyString(this.unreadNumHome) && index === 0) ||
        (isNotEmptyString(this.unreadNumDiscovery) && index === 1) ||
        (isNotEmptyString(this.unreadNumMood) && index === 2) || (isNotEmptyString(this.unreadNumMsg) && index === 3) ||
        (isNotEmptyString(this.unreadNumMine) && index === 4)) {
        Badge({
          value: index === 0 ? (this.unreadNumHome === '-1' ? '' : this.unreadNumHome) :
            index === 1 ? (this.unreadNumDiscovery === '-1' ? '' : this.unreadNumDiscovery) :
              index === 2 ? (this.unreadNumMood === '-1' ? '' : this.unreadNumMood) :
                index === 3 ? (this.unreadNumMsg === '-1' ? '' : this.unreadNumMsg) :
                  (this.unreadNumMine === '-1' ? '' : this.unreadNumMine), // 设置 badge 的显示文本
          position: BadgePosition.RightTop, // 设置 badge 显示在右上角
          style: index === 0 || index === 3 ? { badgeColor: $r('app.color.color_red') } :
            { badgeSize: 9, badgeColor: $r('app.color.color_red') }// 设置 badge 的显示样式,首页和消息不用限制大小,让它自适应
        }) {
          Column() {

            Image(this.selectedIndex === index ? item.imageActivated : item.imageOriginal)
              .height($r('app.float.tab_image_size'))
              .width($r('app.float.tab_image_size'))

          }
          .padding({ left: 10, right: 10, })
        }
        .margin({ top: 5, bottom: 5 })
      } else {
        Column() {

          Image(this.selectedIndex === index ? item.imageActivated : item.imageOriginal)
            .height($r('app.float.tab_image_size'))
            .width($r('app.float.tab_image_size'))

        }
        .padding({ left: 10, right: 10, })
        .margin({ top: 5, bottom: 5 })
      }

      Text(item.title)
        .fontSize($r('app.float.tab_text_font_size'))
        .fontWeight(500)
        .fontColor(this.selectedIndex === index ? $r('app.color.color_main') : Color.White)
        .textAlign(TextAlign.Center)
        .margin({
          bottom: $r('app.float.tab_text_margin_bottom')
        })

    }
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
    .backgroundColor($r("app.color.color_black"))
    .onClick(() => {
      this.selectedIndex = index
    })
  }

  build() {
    Column() {

      Tabs({
        index: this.selectedIndex,
        barPosition: BarPosition.End,
      }) {
        // 首页tab
        TabContent() {
          HomePage()
        }
        .tabBar(this.TabBottom(MainViewModel.tabTitle[0], 0))

        // 发现tab
        TabContent() {
          DiscoveryPage()
        }
        .tabBar(this.TabBottom(MainViewModel.tabTitle[1], 1))

        // 动态tab
        TabContent() {
          MoodPage()
        }
        .tabBar(this.TabBottom(MainViewModel.tabTitle[2], 2))
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码私信我

标签:index,读数,鸿蒙,color,app,item,tab,带未
From: https://blog.csdn.net/u010074743/article/details/142970562

相关文章

  • k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
    计算节点的功能:提供容器运行的环境kube-proxy的主要功能:术业有专攻,kube-proxy的主要功能可以概括为4个字网络规则那么kube-proxy自己其实是个daemonset控制器跑的每个节点上都有个的pod它负责网络规则其实呢它还是个小领导它不直接去搞网络规则而是告诉别人,网络规......
  • 如何在鸿蒙 NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?
    在开发鸿蒙NEXT应用时,咱们需要经常创建自定义组件,由于自定义组件内部UI结构固定,仅与使用方进行数据传递,因此,ArkUI还提供了一种更轻量的UI元素复用机制@Builder。大家好,我是V哥,在鸿蒙NEXT开发中,@Builder装饰器是一种轻量级的UI元素复用机制,它允许开发者将重复使用......
  • 【Stable Diffusion案例教程】如何制作3D立体字场景效果
    StableDiffusion是2022年发布的深度学习文本到图像生成模型,它主要用于根据文本的描述产生详细图像,以及在提示词指导下进行图生图的绘图模式。基于开源的优势,SD有着庞大的用户社群,其中又包含着大量的优秀创作者和优质模型。这份完整版的AI绘画全套学习资料已经上传CSDN,......
  • Stable Diffusion【应用篇】【插画转绘】:建筑风景图片的插画转绘制作教程
    学好AI绘画不论是就业还是做副业赚钱都不错,但要学会AI绘画还是要有一个学习规划。最后大家分享一份全套的AI绘画学习资料,给那些想学习AI绘画的小伙伴们一点帮助!图片的插画转绘有很多种不同的风格,今天我们分享另一种制作方法。我们先看一下效果图。这份完整版的A......
  • 24最新AI绘画StableDiffusion模型推荐系列(风格型)
    前言今天,分享几个SDXL的特殊风格模型,这些模型在特定风格下非常出彩,弥补了一些“我已经看腻了AI画图”的情况。这几位作者分享的SDXL模型艺术风格上表现得尤为出色,而且他们都是秉持着开源精神免费分享自己的模型。训练过模型的小伙伴肯定都知道,要收录上万张图片做数据集,已经......
  • 【SD基础】Stable Diffusion 提示词万能公式&插件&词库
    提示词公式对于StableDiffusion来说,提示词(又或者说“关键词”)是输入项,并且输入英文,StableDiffusion只能输入英文并且被AI理解,转换为向量然后进行生成。合适的提示词可以生成你所想要的画面,如果画面不尽人意,那么大概率是提示词的问题,不合适的提示词会被AI曲解,那么这个时候......
  • 强大的无头UI表格库:TanStack Table!Github Star达到了惊人的25K!
    强大的无头UI表格库:TanStackTable!GithubStar达到了惊人的25K!在构建现代化Web应用时,表格和数据网格是常见的UI组件,特别是在处理大量数据或需要复杂交互时,选择合适的表格库尤为重要。TanStackTable是一款功能强大的HeadlessUI表格库,支持TypeScript/JavaScript、React、......
  • 约80%开发效率提升,原生鸿蒙政务、文旅行业样板间专区上线
    10月8日,华为官方正式宣布,其最新操作系统HarmonyOSNEXT于当日10:08正式开启公测。为有效助力开发者加速行业应用开发,华为开发者联盟生态市场(简称生态市场)近日上线了原生鸿蒙政务行业、文旅行业“样板间”专区。政务和文旅行业作为数字化转型的重要领域,对数智应用的需求日益专业化......
  • 鸿蒙NEXT开发声明式UI是咋回事?
    大家好,我是V哥,ArkTS是HarmonyOS优选的主力应用开发语言,它在TypeScript的基础上进行了扩展,提供了声明式UI描述、自定义组件和动态扩展UI元素的能力。这些能力与ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。ArkTS还提供了多维......
  • IPtables(一)
    规则:filter:包过滤       nat:网络地址转换       mangle:包重构       raw:数据跟踪处理prerouting:路由前规则链      input:数据包入口规则链       forward:转发规则链      output:数据包出口规则链       postrouting......