首页 > 其他分享 >手把手教你华为鸿蒙开发第十章

手把手教你华为鸿蒙开发第十章

时间:2024-12-04 19:01:43浏览次数:7  
标签:TabContent 鸿蒙 Tabs 手把手 app 华为 tabBar Text ic

华为鸿蒙开发:深入探索Tabs组件的定制与应用

引言

在移动应用设计中,标签页(Tabs)是用户切换不同内容区块的重要界面元素。华为鸿蒙操作系统提供的Tabs组件支持开发者创建高度定制化的标签页界面。本文将通过 DevEco Studio 详细介绍Tabs组件的使用,包括基本设置、动态生成标签页、以及如何通过自定义组件来实现独特的视觉效果。

Tabs组件基础

Tabs组件允许开发者创建一组可滑动的标签页,每个标签页对应不同的内容区域。

基本使用

示例1:创建基础Tabs标签页
@Entry
@Component
struct Index {
  build() {
    Tabs() {
      TabContent() {
        Text('探索内容') // 有且只能一个子组件
      }
      .tabBar('探索') // 配置导航

      TabContent() {
        Text('趋势内容') // 有且只能一个子组件
      }
      .tabBar('趋势')

      TabContent() {
        Text('热点内容') // 有且只能一个子组件
      }
      .tabBar('热点')

      TabContent() {
        Text('个人中心内容') // 有且只能一个子组件
      }
      .tabBar('个人中心')
    }
  }
}

在这个示例中,我们创建了一个包含四个标签页的Tabs组件,每个标签页显示不同主题的文本内容。

配置导航

示例2:配置Tabs导航属性
@Entry
@Component
struct Index {
  build() {
    Tabs({
      barPosition: BarPosition.Start // 导航位置
    })
    {
      TabContent() {
        Text('探索内容')
      }
      .tabBar('探索')

      TabContent() {
        Text('趋势内容')
      }
      .tabBar('趋势')

      TabContent() {
        Text('热点内容')
      }
      .tabBar('热点')

      TabContent() {
        Text('个人中心内容')
      }
      .tabBar('个人中心')
    }
    .vertical(false) // 调整导航水平或垂直
    .scrollable(false) // 是否开启手势滑动
    .animationDuration(0) // 点击滑动的动画时间
  }
}

在这个示例中,我们配置了Tabs组件的导航属性,包括导航位置、滚动手势和动画时间。

动态生成Tabs

示例3:使用ForEach动态生成Tabs
@Entry
@Component
struct Index {
  titles: string[] = [
    '探索', '趋势', '热点', '科技', '娱乐',
    '体育', '教育', '健康', '财经', '旅游'
  ]

  build() {
    Tabs() {
      ForEach(this.titles, (item: string, index) => {
        TabContent() {
          Text(`${item}内容`)
        }
        .tabBar(item)
      })
    }
    .barMode(BarMode.Scrollable) // 实现滚动导航栏
  }
}

在这个示例中,我们使用ForEach循环动态生成了10个标签页,每个标签页的标题都是从titles数组中获取的。

自定义Tabs样式

示例4:自定义Tabs样式
@Entry
@Component
struct Index {
  @Builder
  myBuilder(title: string, img: ResourceStr) {
    Column() {
      Image(img)
        .width(30)
      Text(title)
    }
  }

  build() {
    Tabs({
      barPosition: BarPosition.End
    })
    {
      TabContent() {
        Text('消息中心内容')
      }
      .tabBar(this.myBuilder('消息中心', $r('app.media.ic_tabbar_icon_1')))

      TabContent() {
        Text('设置中心内容')
      }
      .tabBar(this.myBuilder('设置中心', $r('app.media.ic_tabbar_icon_2')))
    }
  }
}

在这个示例中,我们定义了一个@Builder函数myBuilder来自定义每个标签页的样式,包括图片和文本。

状态管理

示例5:管理Tabs激活状态
@Entry
@Component
struct Index {
  @State selectedIndex: number = 0

  @Builder
  myBuilder(itemIndex: number, title: string, img: ResourceStr, selImg: ResourceStr) {
    Column() {
      Image(itemIndex == this.selectedIndex ? selImg : img)
        .width(30)
      Text(title)
        .fontColor(itemIndex == this.selectedIndex ? Color.Red : Color.Black)
    }
  }

  build() {
    Tabs()
    {
      TabContent() {
        Text('消息中心内容')
      }
      .tabBar(this.myBuilder(0, '消息中心', $r('app.media.ic_tabbar_icon_1'), $r('app.media.ic_tabbar_icon_1_selected')))

      TabContent() {
        Text('设置中心内容')
      }
      .tabBar(this.myBuilder(1, '设置中心', $r('app.media.ic_tabbar_icon_2'), $r('app.media.ic_tabbar_icon_2_selected')))
    }
    .onChange((index: number) => {
      this.selectedIndex = index
    })
    .animationDuration(0)
    .scrollable(false)
  }
}

在这个示例中,我们使用@State属性selectedIndex来存储当前激活的标签页索引,并在onChange事件中更新这个索引。

特殊形状的Tab

示例6:添加特殊形状的Tab
@Entry
@Component
struct Index {
  @State selectedIndex: number = 0

  @Builder
  myBuilder(itemIndex: number, title: string, img: ResourceStr, selImg: ResourceStr) {
    Column() {
      Image(itemIndex == this.selectedIndex ? selImg : img)
        .width(30)
      Text(title)
        .fontColor(itemIndex == this.selectedIndex ? Color.Red : Color.Black)
    }
  }

  @Builder
  centerBuilder() {
    Image($r('app.media.ic_special_icon'))
      .width(40)
      .margin({ bottom: 10 })
  }

  build() {
    Tabs()
    {
      TabContent() {
        Text('首页内容')
      }
      .tabBar(this.myBuilder(0, '首页', $r('app.media.ic_tabbar_icon_0'), $r('app.media.ic_tabbar_icon_0_selected')))

      TabContent() {
        Text('分类内容')
      }
      .tabBar(this.myBuilder(1, '分类', $r('app.media.ic_tabbar_icon_1'), $r('app.media.ic_tabbar_icon_1_selected')))

      TabContent() {
        Text('活动内容')
      }
      .tabBar(this.centerBuilder())

      TabContent() {
        Text('购物车内容')
      }
      .tabBar(this.myBuilder(3, '购物车', $r('app.media.ic_tabbar_icon_2'), $r('app.media.ic_tabbar_icon_2_selected')))

      TabContent() {
        Text('个人中心内容')
      }
      .tabBar(this.myBuilder(4, '个人中心', $r('app.media.ic_tabbar_icon_3'), $r('app.media.ic_tabbar_icon_3_selected')))
    }
    .onChange((index: number) => {
      this.selectedIndex = index
    })
    .animationDuration(0)
    .scrollable(false)
  }
}

在这个示例中,我们添加了一个特殊形状的标签页,并使用centerBuilder函数来自定义其样式。

结语

通过本文的详细介绍和示例,你应该能够掌握Tabs组件的基本使用、自定义样式以及状态管理。这些技能对于开发具有丰富标签页功能的鸿蒙应用至关重要。如果你有任何问题或想要进一步讨论,欢迎在评论区留下你的想法。


以上就是一篇关于华为鸿蒙开发中Tabs组件的详细教程。希望这篇文章能帮助你更好地理解和使用华为鸿蒙开发中的Tabs组件。如果你在使用 DevEco Studio 进行开发时遇到任何问题,欢迎交流讨论。

标签:TabContent,鸿蒙,Tabs,手把手,app,华为,tabBar,Text,ic
From: https://blog.csdn.net/2302_80663569/article/details/144247318

相关文章

  • 鸿蒙开发-ArkTS 中实现评级功能
    以下是一个在ArkTS中实现简单评级功能的代码示例,示例以一个星级评分的形式呈现,用户可以点击星星来选择对应的评分等级,分数范围是1到5星。1.界面布局部分(使用.ets文件,假设为RatingExample.ets)import{Component,Prop,State}from'@arkts/core';@Entry@Com......
  • 鸿蒙开发-ArkTS 中实现关系数据管理功能
    在ArkTS中使用SQLite数据库来实现简单关系数据功能的具体代码示例,模拟了一个“学生-课程”的多对多关系场景,即一个学生可以选修多门课程,一门课程也可以被多个学生选修。导入必要的模块import{SQLiteDatabase}from'@arkts/sqlite';初始化数据库letdb:SQL......
  • 性能测试报告范例:LS-DYNA在华为 HPC 环境中的性能分析
    摘要LS-DYNA是一款功能强大的非线性有限元分析软件,广泛应用于汽车、航空航天、土木工程等领域。它以模拟复杂物理现象,尤其是高速碰撞、爆炸和冲击等非线性动力学问题而著称。创立与发展初期:LS-DYNA由JohnO.Hallquist博士创立,最初是作为LawrenceLivermore国家实验室的一个......
  • 【华为ICT大赛】ArkTS
    00.目录文章目录00.目录01.学习目标02.ArkTS语言基础类库概述03.并发3.1并发概述(掌握)3.2使用异步并发能力进行开发3.2.1异步并发概述3.2.2单次I/O任务开发指导3.3使用多线程并发能力进行开发3.3.1多线程并发概述3.3.2TaskPool和Worker的对比3.3.3CPU密集......
  • 中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
    在数字化和智能化的浪潮中,伴随国产化战略的深入推进,国产操作系统和软件生态的建设逐渐走向成熟。鸿蒙操作系统(HarmonyOSNext)作为华为推出的重要操作系统,凭借其开放、灵活和高效的特点,正在加速在多个领域的普及和应用。特别是在智能识别和人工智能技术的支持下,鸿蒙系统在各行各......
  • 手把手教你华为鸿蒙开发之第七节
    华为鸿蒙开发:数组和对象遍历及UI渲染详解引言在华为鸿蒙操作系统的开发中,数组和对象的遍历是基础且频繁的操作。无论是处理数据集合还是动态生成用户界面,都需要对数组和对象进行高效的遍历。本文将详细介绍如何在鸿蒙开发中使用for循环、for...of循环以及ForEach方法来遍......
  • 手把手教你华为鸿蒙开发之第九节
    华为鸿蒙开发:滚动视图Scroller与ForEach循环深度解析引言在移动应用开发中,滚动视图是展示大量内容的常用组件。华为鸿蒙操作系统提供了Scroller组件,允许开发者创建滚动视图。本文将通过DevEcoStudio详细介绍Scroller的基本使用、滚动控制以及如何结合ForEach循环动态生成滚......
  • 鸿蒙开发:如何上架一个元服务应用
    前言元服务,类似于微信的小程序,无需安装,即开即用,即用即走,它是基于鸿蒙系统,而非某个应用,也就是系统层的支持,可以说,这一点是非常的便捷,除此之外,元服务是支持独立上架、分发和运行的,能够独立实现业务闭环,可大幅度提升信息与服务的获取效率;特别是对于个人开发者,元服务,更加的包容,目......
  • 手把手教你华为鸿蒙开发之第八节
    华为鸿蒙开发:Swiper轮播组件详解与实践引言在现代用户界面设计中,轮播图是一种常见的组件,用于展示广告、新闻、产品等信息。华为鸿蒙操作系统提供了Swiper轮播组件,使得开发者能够轻松实现轮播效果。本文将通过DevEcoStudio详细介绍Swiper组件的基本使用、属性配置以及......
  • 【kali笔记】MSF内网渗透,手把手教你如何免杀过360!
    ~勤奋刻苦,成就未来~1、TCP与UDP区别总结?TCP面向连接(如打电话要先拨号建立连接)提供可靠的服务;UDP是无连接的,即发送数据之前不需要建立连接,;UDP尽最大努力交付,即不保证可靠交付。(由于UDP无需建立连接,因此UDP不会引入建立连接的时延,TCP需要在端系统中维护连接状态,比如接受......