91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

Tabs組件的簡單使用

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

@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,通過TabContent的tabBar屬性設(shè)置TabBar的顯示內(nèi)容。使用通用屬性width和height設(shè)置了Tabs組件的寬高,使用barWidth和barHeight設(shè)置了TabBar的寬度和高度。

說明

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

設(shè)置TabBar布局模式

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

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

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

  • 當(dāng)頁簽比較多的時(shí)候,可以滑動(dòng)頁簽,下面的示例代碼將barMode設(shè)置為BarMode.Scrollable,實(shí)現(xiàn)了可滾動(dòng)的頁簽:
@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組件頁簽?zāi)J(rèn)顯示在頂部,某些場景下您可能希望Tabs頁簽出現(xiàn)在底部或者側(cè)邊,您可以使用Tabs組件接口中的參數(shù)barPosition設(shè)置頁簽位置。此外頁簽顯示位置還與vertical屬性相關(guān)聯(lián),vertical屬性用于設(shè)置頁簽的排列方向,當(dāng)vertical的屬性值為false(默認(rèn)值)時(shí)頁簽橫向排列,為true時(shí)頁簽縱向排列。 barPosition的值可以設(shè)置為BarPosition.Start(默認(rèn)值)和BarPosition.End:

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

效果圖如下:

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

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

效果圖如下:

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

效果圖如下:

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

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

效果圖如下:

自定義TabBar樣式

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

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

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

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

審核編輯 黃宇

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

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45911
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3952

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    【HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解

    【HarmonyOS 5】鴻蒙中進(jìn)度條的使用詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、HarmonyOS中Progress進(jìn)度
    的頭像 發(fā)表于 07-11 18:26 ?1145次閱讀
    【HarmonyOS 5】<b class='flag-5'>鴻蒙</b>中進(jìn)度條的使用詳解

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

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

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

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?962次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開發(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)開發(fā)的未來已來。\" 獲取完整源碼 | ArkUI-X文檔中心 通過本實(shí)踐可見,ArkUI-X在保持原生性能的前提下,真正實(shí)現(xiàn)了\"一
    發(fā)表于 06-28 21:51

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

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

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

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

    ArkUI介紹

    ArkUI(方舟UI框架)為應(yīng)用的UI開發(fā)提供了完整的基礎(chǔ)設(shè)施,包括簡潔的UI語法、豐富的UI功能(組件、布局、動(dòng)畫以及交互事件),以及實(shí)時(shí)界面預(yù)覽工具等,可以支持開發(fā)者進(jìn)行可視化界面
    發(fā)表于 06-24 06:41

    ArkUI-X案例解析

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

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

    開發(fā)工作量以及保證體驗(yàn)一致性,對于運(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

    ArkUI-X跨平臺(tái)應(yīng)用改造指南

    ,包含了應(yīng)用的所有UI界面、彈窗、媒體圖片等元素,這些都是能夠被用戶直接感知并進(jìn)行操作的。此層是借助HarmonyOS的ArkUI組件以及相關(guān)能力來進(jìn)行設(shè)計(jì)與開發(fā)的,并且ArkUI-X
    發(fā)表于 06-16 23:05

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

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

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

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

    鴻蒙5開發(fā)寶藏案例分享---三折疊應(yīng)用開發(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

    Kuikly鴻蒙版正式開源 —— 揭秘卓越性能適配之旅

    ArkUI 來編寫的,UI組件由數(shù)據(jù)和UI描述組成,UI更新只能通過修改其綁定的數(shù)據(jù)來實(shí)現(xiàn)。渲染層怎樣驅(qū)動(dòng)聲明式的ArkUI成為了鴻蒙版適配的第一個(gè)問題。 初步解決方案:統(tǒng)一Bui
    發(fā)表于 06-04 16:46

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

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