HarmonyOS中实现TabBar(相当于Android中的TabLayout+ViewPager)

news/2025/1/14 7:46:59/

 参考网址:自定义页签切换联动

1.自定义组件TabBarView


@Component
export struct TabBarView{@State currentIndex: number = 0@State selectedIndex: number = 0private controller: TabsController = new TabsController()//tab标签内容+横线布局@Builder tabBuilder(index: number, name: string) {Column() {Text(name).fontColor(this.selectedIndex === index ? '#007DFF' : '#182431').fontSize(18).fontWeight(this.selectedIndex === index ? 500 : 400).lineHeight(22).height('95%')Divider().strokeWidth(2).color('#007DFF').opacity(this.selectedIndex === index ? 1 : 0)}.backgroundColor(Color.White).width('100%').height('100%')}@Link arr: Array<string>@Builder tabItem(item: string) {}@BuilderParam item: (item: string) => void = this.tabItembuild() {Column() {Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {ForEach(this.arr, (item: string, index: number) => {TabContent() {this.item(item)}.tabBar(this.tabBuilder(index, item))}, (item: string, index: number) => index.toString())}.vertical(false).barMode(BarMode.Fixed).barWidth(360).barHeight(56).animationDuration(400).onChange((index: number) => {// currentIndex控制TabContent显示页签this.currentIndex = indexthis.selectedIndex = index}).onAnimationStart((index: number, targetIndex: number, event: TabsAnimationEvent) => {if (index === targetIndex) {return}// selectedIndex控制自定义TabBar内Image和Text颜色切换this.selectedIndex = targetIndex}).width('100%').height('100%').backgroundColor('#F1F3F5')}.width('100%')}
}

2.组件中使用

import { TabBarView } from "./TabBarView"
@Entry({routeName: 'IndexPage'})@Component
export struct IndexPage{@State arr: Array<string> = ['标签1', '标签2']@BuildertabItem(item: string){//在此处写各个标签对于的布局组件,可抽离出来使代码简洁if (item === this.arr[0]){//标签1组件}else if (item === this.arr[1]){//标签2组件}}build() {Column(){TabBarView({arr: this.arr, item: this.tabItem})}}
}

说明:我是根据官网提供的Tabs实例代码1(自定义页签切换联动)封装的简单使用(代码可直接使用),这种方式是为了复用。


http://www.ppmy.cn/news/1562981.html

相关文章

云原生周刊:Prometheus 3.0 正式发布

开源项目推荐 Achilles-SDK Achilles-SDK 是一个专为构建 Kubernetes 控制器而设计的开源开发工具包。它简化了控制器的开发流程&#xff0c;提供了强大的 API 和高效的抽象层&#xff0c;使开发者能够专注于业务逻辑的实现&#xff0c;而无需处理底层复杂性。Achilles-SDK 支…

基于Springboot + vue实现的厨艺交流平台

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

nginx-lua模块安装

一.简述 安装 Nginx 的 Lua 模块&#xff08;通常指的是 ngx_lua 模块&#xff09;可以显著增强 Nginx 的功能&#xff0c;使其能够执行 Lua 脚本。这使得 Nginx 可以处理更复杂的逻辑和动态内容生成。以下是详细的安装步骤&#xff0c;包括安装 OpenResty 或从源码编译 Nginx…

Python----Python高级(函数)

一、函数基础 1.1、函数的用法和底层分析 函数是可重用的程序代码块。 函数的作用&#xff0c;不仅可以实现代码的复用&#xff0c;更能实现代码的一致性。一致性指的是&#xff0c;只要修改函数的代码&#xff0c;则所有调用该函数的地方都能得到体现。 在编写函数时&#xf…

机器学习头歌(第二部分)

一、朴素贝叶斯简述 任务描述 本关任务&#xff1a;了解朴素贝叶斯的基本概念&#xff0c;完成右侧窗口内的单项选择题。 相关知识 概率的解释 现在我们站在两个统计学派的角度来深入理解什么是概率。 经典统计学认为概率表述的是一件事发生的频率&#xff0c;概率定义为频率…

计算机网络之---静态路由与动态路由

静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包&#xff0c;而不会自动调整。它不依赖于任何路由协议。 特点&#xff1a; 手动配置&#xff1a;网络管理员需要手动在路由器中配置每条静态路由。不自动更新&#xff1a;…

基于异步IO的io_uring

基于异步IO的io_uring 1. io_uring的实现原理 io_uring使用了一种异步IO机制&#xff0c;它通过一对环形缓冲区(ring buffer)实现用户态于内核态之间的高效通信&#xff0c;用户只需将IO请求放入提交队列&#xff0c;当内核完成IO请求时&#xff0c;会将结果放入完成队列&…

MySQL主从:如何处理“Got Fatal Error 1236”或 MY-013114 错误(percona译文)

错误的 GTID 如今&#xff0c;典型的复制设置使用 GTID 模式&#xff0c;完整的错误消息可能如下所示&#xff1a; mysql > show replica status\G *************************** 1. row ***************************Replica_IO_Running: NoReplica_SQL_Running: YesLast_I…