马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
参考网址:自定义页签切换联动
1.自定义组件TabBarView
- @Component
- export struct TabBarView{
- @State currentIndex: number = 0
- @State selectedIndex: number = 0
- private 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.tabItem
- build() {
- 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 = index
- this.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']
- @Builder
- tabItem(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(自定义页签切换联动)封装的简单使用(代码可直接使用),这种方式是为了复用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |