【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解

这篇具有很好参考价值的文章主要介绍了【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现在市场上的大部分应用,主页都是才用底部导航栏菜单作为页面主体框架来展示,
tabs组件仅可包含子组件tabscontent,Harmony,harmonyos,华为,ArkTS,ArkUI
在鸿蒙中是使用Tabs组件实现,下面我们开始讲解Tab组件的使用。

Tabs介绍

Tabs是一个通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图,它仅可包含子组件TabContent,同时搭配 TabsController使用。

TabsController 是Tabs组件的控制器,用于控制Tabs组件进行页签切换。不支持一个TabsController控制多个Tabs组件。
具体可查看官网介绍,这里就不多描述。

Tabs使用例子

@Entry
@Component
export struct MainPage {
  @State mCurrentPage: number = 0;
  private mTabController: TabsController = new TabsController()

  build() {
    Tabs({ barPosition: BarPosition.End, controller: this.mTabController }) {

      TabContent() {
        Text('第一个页面')
      }
      .tabBar(this.TabBuilder(0))

      TabContent() {
        Text('第二个页面')
      }
      .tabBar(this.TabBuilder(1))

      TabContent() {
        Text('第三个页面')
      }
      .tabBar(this.TabBuilder(2))

    }
    .scrollable(true)
    .vertical(false)
    .barMode(BarMode.Fixed)
    .onChange((index) => {
      this.mCurrentPage = index;
    })

  }

  @Builder TabBuilder(index: number) {
    Column() {
      Image(index == this.mCurrentPage ? $r('app.media.icon_selected'): $r('app.media.icon_normal'))
        .width('24vp')
        .height('24vp')
        .objectFit(ImageFit.Contain)
      Text('菜单')
        .fontSize('10fp')
        .fontWeight(500)
        .fontColor(this.mCurrentPage === index ? $r('app.color.blue_3d9dff') : $r('app.color.gray_999999'))
        .margin({ top: '4vp' })
    }.justifyContent(FlexAlign.Center)
  }
}

这里对上面代码进行讲解,

  1. 首先定义一个Tab容器组件,在其中摆放了三个TabContent子组件;
  2. 使用vertical属性跟barPosition: BarPosition.End配合即可以将导航栏显示在页面底部;
  3. 使用scrollable开启手势滑动切换tab页;
  4. 定义 onChange函数,可以监听tab页面切换事件,这里我们定义了一个全局变量记录当前tab显示子页索引,通过该值可对底部栏的图标跟文本进行样式高亮处理。
  5. 使用@Builder注解定义了一个TabBuilder的布局绘制方法,进行tab底部导航栏的绘制

上面代码是一个比较粗糙的例子,由于tabBar设置调用同一个TabBuilder,因此绘制后,每个底部菜单是一模一样的效果。

下面我们对其进行修改,让它支持多个不同菜单绘制

TabBar 样式设置

定义菜单样式对象-NavigationItem

export interface NavigationItem {
  id: number; 
  text: Resource; //文本
  icon_normal: Resource; // 默认图标
  icon_selected: Resource; // 选中图标
}

定义一个底部菜单栏集合数据-NavigationList

export const NavigationList: NavigationItem[] = [
  {
    icon_normal: $r('app.media.main_icon_home'),
    icon_selected: $r('app.media.main_icon_home'),
    text: $r('app.string.tab_home'),
    id: 0
  },
  {
    icon_normal: $r('app.media.main_icon_life'),
    icon_selected: $r('app.media.main_icon_life'),
    text: $r('app.string.tab_life'),
    id: 1
  },
  {
    icon_normal: $r('app.media.main_icon_user'),
    icon_selected: $r('app.media.main_icon_user'),
    text: $r('app.string.tab_user'),
    id: 2
  },
]

修改TabBuilder

@Builder TabBuilder(item: NavigationItem) {

     Column() {
        Image(this.mCurrentPage === this.getTabIndexByItem(item) ? item.icon_selected : item.icon_normal)
          .width('24vp')
          .height('24vp')
          .objectFit(ImageFit.Contain)

        Text(item.text)
          .fontSize('10fp')
          .fontWeight(500)
          .fontColor(this.mCurrentPage === this.getTabIndexByItem(item) ? $r('app.color_blue_3d9dff') : $r('app.color.gray_999999'))
          .margin({ top: '4vp' })
      }
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%')
    }
  }

这里是根据NavigationItem ID动态找在数组中的索引。

getTabIndexByItem(navigationItem: NavigationItem): number {
    return this.mTabDataList.findIndex(item => item.id === navigationItem.id);
  }

通过传入一个NavigationItem,对TabBuilder中的组件样式进行动态配置。

Tab 组件控制

如果想要通过代码去控制tab切换到指定子页,可以使用 TabController来对tab进行控制,使用changeIndex函数进行切换。

题外话

本文到此结束,谢谢阅读,由于时间匆忙,只能进行简单讲解,一些tab滑动动画、tabItem的点击样式、tabbar分隔线的问题,后续有时间再进行补充。如有疑问,评论区沟通探讨。文章来源地址https://www.toymoban.com/news/detail-795221.html

到了这里,关于【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Flex)

    以弹性方式布局子组件的容器组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。 Flex组件主轴默认不设置时撑满父容

    2024年04月11日
    浏览(53)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

    id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 名称 参数说明 描述 id string 组件

    2024年04月22日
    浏览(67)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:List)

    列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件内容区小于一屏时,默认没有回弹效果。需要回弹效果,可以通过edgeEffe

    2024年04月13日
    浏览(108)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件内容模糊)

    为当前组件添加内容模糊效果。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 foregroundBlurStyle(value: BlurStyle, options?: ForegroundBlurStyleOptions) 为当前组件提供内容模糊能力。 系统能力:  SystemCapability.ArkUI.ArkUI.Full 参数: 参数

    2024年03月09日
    浏览(57)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

    UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行,本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明: 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的

    2024年04月13日
    浏览(48)
  • 【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

    在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片、文件的选择,拉起系统相机进行拍照的这样一种

    2024年02月04日
    浏览(61)
  • 华为鸿蒙应用--底部导航栏Tabs(自适应手机和平板)-ArkTs

    鸿蒙ArkTS Tabs组件开发底部导航栏,可自适应平板和手机,相当于Android开发中的MainActivity+Fragment的底部导航栏模式。 一、主页:MainPage.ets StyleConstants.ets: 二、BreakpointSystem.ets:响应式设计的核心 三、ButtonInfoModel.ets:底部导航按钮数据 

    2024年01月21日
    浏览(69)
  • 鸿蒙4.0开发笔记之ArkTS语法基础的UI描述、基础组件的使用与如何查看组件是否有参数(八)

    在HarmonyOS的ArkTS语法中,万物皆组件。ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。 1、无/有参数组件 无参数组件:

    2024年02月03日
    浏览(40)
  • 鸿蒙实战:ArkTs 开发一个鸿蒙应用

    学习过的 ArkTs 知识点,一步一步开发一个小的鸿蒙应用示例,涉及到  ArkTs 语法、注解 @Entry 、 @Component 、 @state 、路由、生命周期、 @Prop 、 @Link 、常用组件的使用等等知识点。 要开发一个鸿蒙应用,首先我们需要知道 系统是如何找到页面的启动入口 。 鸿蒙如何启动应用

    2024年02月22日
    浏览(57)
  • 【鸿蒙软件开发】ArkTS容器组件之Badge

    Badge组件:可以附加在单个组件上用于信息标记的容器组件。 可以附加在单个组件上用于信息标记的容器组件。 说明 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 支持单个子组件。 说明 子组件类型:系统组件和自定义组

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包