一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkUI開(kāi)發(fā)-Tabs組件的使用

jf_46214456 ? 來(lái)源: jf_46214456 ? 作者: jf_46214456 ? 2024-01-19 16:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在我們常用的應(yīng)用中,經(jīng)常會(huì)有視圖內(nèi)容切換的場(chǎng)景,來(lái)展示更加豐富的內(nèi)容。比如下面這個(gè)頁(yè)面,點(diǎn)擊底部的頁(yè)簽的選項(xiàng),可以實(shí)現(xiàn)“首頁(yè)”和“我的” 兩個(gè)內(nèi)容視圖的切換。

ArkUI開(kāi)發(fā)框架提供了一種頁(yè)簽容器組件Tabs,開(kāi)發(fā)者通過(guò)Tabs組件可以很容易的實(shí)現(xiàn)內(nèi)容視圖的切換。頁(yè)簽容器Tabs的形式多種多樣,不同的頁(yè)面設(shè)計(jì)頁(yè)簽不一樣,可以把頁(yè)簽設(shè)置在底部、頂部或者側(cè)邊。

本文將詳細(xì)介紹Tabs組件的使用。

Tabs組件的簡(jiǎn)單使用

Tabs組件僅可包含子組件TabContent,每一個(gè)頁(yè)簽對(duì)應(yīng)一個(gè)內(nèi)容視圖即TabContent組件。下面的示例代碼構(gòu)建了一個(gè)簡(jiǎn)單的頁(yè)簽頁(yè)面:

@Entry
@Component
struct TabsExample {
 private controller: TabsController = new TabsController()
 
 build() {
 Column() {
 Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
 TabContent() {
          Column().width('100%').height('100%').backgroundColor(Color.Green)
        }
        .tabBar('green')
 
 TabContent() {
          Column().width('100%').height('100%').backgroundColor(Color.Blue)
        }
        .tabBar('blue')
 
 TabContent() {
          Column().width('100%').height('100%').backgroundColor(Color.Yellow)
        }
        .tabBar('yellow')
 
 TabContent() {
          Column().width('100%').height('100%').backgroundColor(Color.Pink)
        }
        .tabBar('pink')
      }
      .barWidth('100%') // 設(shè)置TabBar寬度
      .barHeight(60) // 設(shè)置TabBar高度
      .width('100%') // 設(shè)置Tabs組件寬度
      .height('100%') // 設(shè)置Tabs組件高度
      .backgroundColor(0xF5F5F5) // 設(shè)置Tabs組件背景顏色
    }
    .width('100%')
    .height('100%')
  }
}

效果圖如下:

上面示例代碼中,Tabs組件中包含4個(gè)子組件TabContent,通過(guò)TabContent的tabBar屬性設(shè)置TabBar的顯示內(nèi)容。使用通用屬性width和height設(shè)置了Tabs組件的寬高,使用barWidth和barHeight設(shè)置了TabBar的寬度和高度。

說(shuō)明

  • TabContent組件不支持設(shè)置通用寬度屬性,其寬度默認(rèn)撐滿Tabs父組件。
  • TabContent組件不支持設(shè)置通用高度屬性,其高度由Tabs父組件高度與TabBar組件高度決定。

設(shè)置TabBar布局模式

因?yàn)門(mén)abs的布局模式默認(rèn)是Fixed的,所以Tabs的頁(yè)簽是不可滑動(dòng)的。當(dāng)頁(yè)簽比較多的時(shí)候,可能會(huì)導(dǎo)致頁(yè)簽顯示不全,將布局模式設(shè)置為Scrollable的話,可以實(shí)現(xiàn)頁(yè)簽的滾動(dòng)。 Tabs的布局模式有Fixed(默認(rèn))和Scrollable兩種:

  • BarMode.Fixed:所有TabBar平均分配barWidth寬度(縱向時(shí)平均分配barHeight高度),頁(yè)簽不可滾動(dòng),效果圖如下:

  • BarMode.Scrollable:每一個(gè)TabBar均使用實(shí)際布局寬度,超過(guò)總長(zhǎng)度(橫向Tabs的barWidth,縱向Tabs的barHeight)后可滑動(dòng)。

  • 當(dāng)頁(yè)簽比較多的時(shí)候,可以滑動(dòng)頁(yè)簽,下面的示例代碼將barMode設(shè)置為BarMode.Scrollable,實(shí)現(xiàn)了可滾動(dòng)的頁(yè)簽:
@Entry
@Component
struct TabsExample {
 private controller: TabsController = new TabsController()
 
 build() {
 Column() {
 Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
 TabContent() {
          Column()
            .width('100%')
            .height('100%')
            .backgroundColor(Color.Green)
        }
        .tabBar('green')
 
 TabContent() {
          Column()
            .width('100%')
            .height('100%')
            .backgroundColor(Color.Blue)
        }
        .tabBar('blue')
 
        ...
 
      }
      .barMode(BarMode.Scrollable)
      .barWidth('100%')
      .barHeight(60)
      .width('100%')
      .height('100%')
    }
  }
}

設(shè)置TabBar位置和排列方向 Tabs組件頁(yè)簽?zāi)J(rèn)顯示在頂部,某些場(chǎng)景下您可能希望Tabs頁(yè)簽出現(xiàn)在底部或者側(cè)邊,您可以使用Tabs組件接口中的參數(shù)barPosition設(shè)置頁(yè)簽位置。此外頁(yè)簽顯示位置還與vertical屬性相關(guān)聯(lián),vertical屬性用于設(shè)置頁(yè)簽的排列方向,當(dāng)vertical的屬性值為false(默認(rèn)值)時(shí)頁(yè)簽橫向排列,為true時(shí)頁(yè)簽縱向排列。 barPosition的值可以設(shè)置為BarPosition.Start(默認(rèn)值)和BarPosition.End:

  • BarPosition.Startvertical屬性方法設(shè)置為false(默認(rèn)值)時(shí),頁(yè)簽位于容器頂部。
Tabs({ barPosition: BarPosition.Start }) {
  ...
}
.vertical(false) 
.barWidth('100%') 
.barHeight(60)

效果圖如下:

vertical屬性方法設(shè)置為true時(shí),頁(yè)簽位于容器左側(cè)。

Tabs({ barPosition: BarPosition.Start }) {
  ...
}
.vertical(true) 
.barWidth(100) 
.barHeight(200)

效果圖如下:

  • BarPosition.Endvertical屬性方法設(shè)置為false時(shí),頁(yè)簽位于容器底部。
Tabs({ barPosition: BarPosition.End }) {
  ...
}
.vertical(false) 
.barWidth('100%') 
.barHeight(60)

效果圖如下:

vertical屬性方法設(shè)置為true時(shí),頁(yè)簽位于容器右側(cè)。

Tabs({ barPosition: BarPosition.End}) {
  ...
}
.vertical(true) 
.barWidth(100) 
.barHeight(200)

效果圖如下:

自定義TabBar樣式

TabBar的默認(rèn)顯示效果如下所示:

往往開(kāi)發(fā)過(guò)程中,UX給我們的設(shè)計(jì)效果可能并不是這樣的,比如下面的這種底部頁(yè)簽效果:

TabContent的tabBar屬性除了支持string類(lèi)型,還支持使用@Builder裝飾器修飾的函數(shù)。您可以使用@Builder裝飾器,構(gòu)造一個(gè)生成自定義TabBar樣式的函數(shù),實(shí)現(xiàn)上面的底部頁(yè)簽效果,示例代碼如下:

@Entry
@Component
struct TabsExample {
 @State currentIndex: number = 0;
 private tabsController: TabsController = new TabsController();
 
 @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
 Column() {
      Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
        .size({ width: 25, height: 25 })
      Text(title)
        .fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B')
    }
    .width('100%')
    .height(50)
    .justifyContent(FlexAlign.Center)
    .onClick(() = > {
 this.currentIndex = targetIndex;
 this.tabsController.changeIndex(this.currentIndex);
    })
  }
 
 build() {
 Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
 TabContent() {
        Column().width('100%').height('100%').backgroundColor('#00CB87')
      }
      .tabBar(this.TabBuilder('首頁(yè)', 0, $r('app.media.home_selected'), $r('app.media.home_normal')))
 
 TabContent() {
        Column().width('100%').height('100%').backgroundColor('#007DFF')
      }
      .tabBar(this.TabBuilder('我的', 1, $r('app.media.mine_selected'), $r('app.media.mine_normal')))
    }
    .barWidth('100%')
    .barHeight(50)
    .onChange((index: number) = > {
 this.currentIndex = index;
    })
  }
}

示例代碼中將barPosition的值設(shè)置為BarPosition.End,使頁(yè)簽顯示在底部。使用@Builder修飾TabBuilder函數(shù),生成由Image和Text組成的頁(yè)簽。同時(shí)也給Tabs組件設(shè)置了TabsController控制器,當(dāng)點(diǎn)擊某個(gè)頁(yè)簽時(shí),調(diào)用changeIndex方法進(jìn)行頁(yè)簽內(nèi)容切換。 最后還需要給Tabs添加onChange事件,Tab頁(yè)簽切換后觸發(fā)該事件,這樣當(dāng)我們左右滑動(dòng)內(nèi)容視圖的時(shí)候,頁(yè)簽樣式也會(huì)跟著改變。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44063
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3854

    瀏覽量

    18629
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【HarmonyOS 5】鴻蒙頁(yè)面和組件生命周期函數(shù)

    【HarmonyOS 5】鴻蒙頁(yè)面和組件生命周期函數(shù) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類(lèi)應(yīng)用 (金融理財(cái)
    的頭像 發(fā)表于 07-11 18:24 ?294次閱讀

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?289次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>組件</b>實(shí)踐

    【HarmonyOS next】ArkUI-X休閑益智連連看【進(jìn)階】

    鴻蒙和iOS設(shè)備上啟動(dòng)的瞬間,真正感受到了跨平臺(tái)開(kāi)發(fā)的未來(lái)已來(lái)。\" 獲取完整源碼 | ArkUI-X文檔中心 通過(guò)本實(shí)踐可見(jiàn),ArkUI-X在保持原生性能的前提下,真正實(shí)現(xiàn)了\"一
    發(fā)表于 06-28 21:51

    【HarmonyOS next】ArkUI-X新聞熱搜聚合App【進(jìn)階】

    通過(guò)ArkUI-X將鴻蒙下的新聞熱搜聚合App轉(zhuǎn)換為iOS 一、項(xiàng)目背景與技術(shù)選型 1.1 項(xiàng)目概述 本案例基于鴻蒙(HarmonyOS)開(kāi)發(fā)的聚合熱搜熱榜應(yīng)用,通過(guò)調(diào)用韓小韓博客提供
    發(fā)表于 06-28 21:43

    HarmonyOS NEXT應(yīng)用元服務(wù)常見(jiàn)列表操作Tabs吸頂場(chǎng)景

    Tabs吸頂場(chǎng)景 場(chǎng)景描述 Tabs嵌套List的吸頂效果,常用于新聞、資訊類(lèi)應(yīng)用的首頁(yè)。 本場(chǎng)景以Tabs頁(yè)簽首頁(yè)內(nèi)容為例,在首頁(yè)TabContent的內(nèi)容區(qū)域使用List組件配合其
    發(fā)表于 06-28 15:07

    ArkUI-X案例解析

    實(shí)現(xiàn)的,應(yīng)首先符合ArkUI-X框架的規(guī)格要求. 在應(yīng)用UI方面存在的差異,是無(wú)法借助Bridge能力來(lái)彌補(bǔ)的。在此建議使用ArkUI-X框架中已經(jīng)適配完畢的組件,這些組件功能相對(duì)穩(wěn)定
    發(fā)表于 06-23 22:40

    ArkUI-X跨平臺(tái)技術(shù)落地-華為運(yùn)動(dòng)健康(一)

    開(kāi)發(fā)工作量以及保證體驗(yàn)一致性,對(duì)于運(yùn)動(dòng)健康A(chǔ)pp而言,顯得尤為重要。作為鴻蒙NEXT系統(tǒng)生態(tài)中的重要一員,ArkUI-X框架是我們跨平臺(tái)技術(shù)方案的首選。結(jié)合當(dāng)前運(yùn)動(dòng)健康三端現(xiàn)狀,具體采取如下跨平臺(tái)技術(shù)
    發(fā)表于 06-18 22:53

    鴻蒙5開(kāi)發(fā)寶藏案例分享---分析幀率問(wèn)題

    鴻蒙性能優(yōu)化寶藏:幀率問(wèn)題實(shí)戰(zhàn)案例解析 嘿,各位鴻蒙開(kāi)發(fā)者! 今天分享一個(gè)開(kāi)發(fā)中的大發(fā)現(xiàn)——鴻蒙官方文檔里藏著一堆超實(shí)用的性能優(yōu)化案例!這些
    發(fā)表于 06-12 17:07

    鴻蒙5開(kāi)發(fā)寶藏案例分享---點(diǎn)擊完成時(shí)延分析

    ?** 鴻蒙完成時(shí)延優(yōu)化實(shí)戰(zhàn)指南:讓你的應(yīng)用絲滑如飛!** 在移動(dòng)端開(kāi)發(fā)中, 完成時(shí)延就是用戶體驗(yàn)的生命線 !今天帶你深入鴻蒙完成時(shí)延優(yōu)化,揭秘官方文檔中的寶藏技巧,讓你的應(yīng)用告別卡頓,流暢起飛
    發(fā)表于 06-12 17:03

    鴻蒙5開(kāi)發(fā)寶藏案例分享---三折疊應(yīng)用開(kāi)發(fā)分享

    ) // 強(qiáng)制16:9 } ?總結(jié) 鴻蒙的三折疊適配方案核心可總結(jié)為: ? 斷點(diǎn)驅(qū)動(dòng)布局 :sm/md/lg覆蓋所有狀態(tài) ? 組件動(dòng)態(tài)屬性 :Tabs/WaterFlow/Swiper根據(jù)斷點(diǎn)調(diào)整參數(shù)
    發(fā)表于 06-12 15:47

    開(kāi)源啦?。?!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來(lái)一起共創(chuàng)

    的地方請(qǐng)大家高抬貴手,寬容一下,謝謝。 這次主要是給大家?guī)?lái)一個(gè)重磅消息,就是我自己使用鴻蒙ArkTS語(yǔ)法開(kāi)發(fā)的圖表組件今日正式開(kāi)源了。為什么?原因有兩點(diǎn)吧! 鴻蒙是國(guó)產(chǎn)的操作系統(tǒng),
    發(fā)表于 03-15 15:21

    Get這個(gè)秘籍,鴻蒙原生應(yīng)用頁(yè)面滑動(dòng)絲滑無(wú)比

    鴻蒙應(yīng)用開(kāi)發(fā)中,部分應(yīng)用頁(yè)面在滑動(dòng)時(shí)會(huì)出現(xiàn)白塊或白屏的問(wèn)題,不僅困擾開(kāi)發(fā)者,還直接影響用戶體驗(yàn)。針對(duì)這一痛點(diǎn),華為近期分別推出了針對(duì)鴻蒙原生應(yīng)用A
    發(fā)表于 03-06 14:41

    華為推出RN/H5多設(shè)備自適應(yīng)組件庫(kù)

    在原生鴻蒙應(yīng)用開(kāi)發(fā)中,華為針對(duì)ArkUI框架推出了一整套針對(duì)多設(shè)備適配的完善能力(如“一多”能力)以及高階組件(如分欄、邊看邊評(píng)等),幫助開(kāi)發(fā)
    的頭像 發(fā)表于 01-16 14:46 ?796次閱讀

    鴻蒙原生開(kāi)發(fā)手記:01-元服務(wù)開(kāi)發(fā)

    簡(jiǎn)介 元服務(wù)是鴻蒙中的一種輕量應(yīng)用形態(tài),無(wú)需下載,直接運(yùn)行。類(lèi)似于微信小程序,但與小程序不同的是,元服務(wù)更加輕量。 元服務(wù)使用原生開(kāi)發(fā),是系統(tǒng)級(jí)提供的,無(wú)論從易用性、性能、體驗(yàn)上,都要比小程序好
    發(fā)表于 11-14 17:28

    鴻蒙Flutter實(shí)戰(zhàn):07混合開(kāi)發(fā)

    # 鴻蒙Flutter實(shí)戰(zhàn):混合開(kāi)發(fā) 鴻蒙Flutter混合開(kāi)發(fā)主要有兩種形式。 ## 1.基于har 將flutter module打包成har包,在原生
    發(fā)表于 10-23 16:00