鴻蒙倉頡開發語言實戰教程:自定義tabbar

大家周末好呀,今天繼續分享倉頡語言開發商城應用的實戰教程,今天要做的是tabbar。

大家都知道ArkTs有Tabs和TabContent容器,能夠實現上圖的樣式,滿足基本的使用需求。而倉頡就不同了,它雖然也有這兩個組件,但是它的tabbar參數只支持傳入圖片或者文字,不能像ArkTs那樣能傳入組件,所以在倉頡語言中官方的tabbar局限性非常大。

給大家實操講解一下,下面是一段Tabs的基本寫法:

Tabs(BarPosition.End, this.controller){TabContent(){Text('頁面1')}TabContent(){Text('頁面2’)}
}

如果你要設置tabbar的樣式,需要在TabContent下添加tabbar屬性,然后你會發現tabbar只有唯二的兩個參數:

TabContent(){Text('頁面1')}.tabBar(icon: CJResource, text: CJResource)

設置完之后它長這樣:

這樣就無法滿足我們的需求,所以我們需要自定義。

每一個tabbar元素都有一個圖片組件和一個文字組件,我給它寫出來:

Column {Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}

然后它需要有一個選中狀態,難受的是倉頡不支持三元表達式,所以我只能寫if語句:

Column {if(this.currenttabIndex == index){Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}else {Image(item.icon).width(28).height(28)Text(item.title).fontSize(15).fontColor(Color.GRAY).margin(top: 3)}}

它還需要一個點擊事件:

Column {if(this.currenttabIndex == index){Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}else {Image(item.icon).width(28).height(28)Text(item.title).fontSize(15).fontColor(Color.GRAY).margin(top: 3)}}
.onClick({evet => this.currenttabIndex = index;this.controller.changeIndex(Int32(this.currenttabIndex))})

這樣一個元素就寫好了,接下來我只要循環添加幾個元素,一個完整的tabbar就寫好了,這里大家也要注意一下倉頡中foreach的寫法:

Row {ForEach(this.tabList, itemGeneratorFunc: {item: TabItem, index: Int64 =>Column {if(this.currenttabIndex == index){Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}else {Image(item.icon).width(28).height(28)Text(item.title).fontSize(15).fontColor(Color.GRAY).margin(top: 3)}}.onClick({evet => this.currenttabIndex = index;this.controller.changeIndex(Int32(this.currenttabIndex))})})
}
.width(100.percent)
.height(60)
.alignItems(VerticalAlign.Center)
.justifyContent(FlexAlign.SpaceAround)

最后我們還是需要官方的Tabs容器來添加頁面,你只要不設置tabbar屬性底部導航欄區域就是空白的,正好把我們自定義的tabbar放上,下面是完整的示例代碼:

let tabList: Array<TabItem> = [TabItem(@r(app.media.shop_tab_00), @r(app.media.shop_tab_01), '首頁'),TabItem(@r(app.media.shop_tab_10), @r(app.media.shop_tab_11), '購物車'),TabItem(@r(app.media.shop_tab_20), @r(app.media.shop_tab_21), '我的')]
@State
var currenttabIndex:Int64 = 0Stack(Alignment.Bottom) {Tabs(BarPosition.End, this.controller){TabContent(){home()}TabContent(){shopcar()}TabContent(){mine()}}.barHeight(60).scrollable(false).animationDuration(0)Row {ForEach(this.tabList, itemGeneratorFunc: {item: TabItem, index: Int64 =>Column {if(this.currenttabIndex == index){Image(item.selectIcon).width(28).height(28)Text(item.title).fontSize(15).fontColor(0xd84642).margin(top: 3)}else {Image(item.icon).width(28).height(28)Text(item.title).fontSize(15).fontColor(Color.GRAY).margin(top: 3)}}.onClick({evet => this.currenttabIndex = index;this.controller.changeIndex(Int32(this.currenttabIndex))})})
}
.width(100.percent)
.height(60)
.alignItems(VerticalAlign.Center)
.justifyContent(FlexAlign.SpaceAround)
}

以上就是倉頡語言自定義tabbar的實現過程,感謝閱讀。#HarmonyOS語言##倉頡##購物#

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84571.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LINUX526 回顧 配置ssh rsync定時備份(未完成)

配置SSH回顧&#xff1a; 1.關閉防火墻、selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable 2. 510 2.配置YUM源 我計劃配本地yum源 2.1 yum源備份 cd /etc/yum.repos.d tar -zcf repo.tar.gz *.repo …

hdc - Mac本環境配置

1. 安裝依賴工具 Homebrew 若未安裝 Homebrew&#xff0c;打開終端執行&#xff1a; OpenJDK 11 HDC 依賴 Java 環境&#xff0c;安裝 OpenJDK 11&#xff1a; 配置環境變量&#xff1a; 2. 安裝 DevEco Studio 下載&#xff1a;從華為開發者聯盟下載最新版 DevEco Studio。 …

項目三 - 任務8:實現詞頻統計功能

本項目旨在實現一個詞頻統計功能&#xff0c;通過讀取文本文件并利用Java編程技巧處理和分析文本數據。首先&#xff0c;使用BufferedReader逐行讀取文件內容&#xff0c;然后通過String.split(" ")方法將每行文本分割成單詞數組。接下來&#xff0c;采用HashMap來存…

Python - 文件部分

- 第 101 篇 - Date: 2025 - 05 - 26 Author: 鄭龍浩/仟墨 Python - 文件部分 學習時間: 2025-05-19 文章目錄 Python - 文件部分一 文件與路徑1 文本文件2 二進制文件3 編碼格式① 常見編碼格式② 指定編碼格式③ 最佳格式④ 處理編碼錯誤 4 絕對路徑5 相對路徑基本寫法返回…

R語言開始繪圖--柱狀圖

R語言是一種專門用于統計計算和圖形顯示的編程語言&#xff0c;廣泛應用于數據分析、統計建模、數據可視化等領域。它由Ross Ihaka和Robert Gentleman于1993年在新西蘭奧克蘭大學開發&#xff0c;現已成為數據科學和統計學領域的重要工具。 R語言的特點 R語言具有豐富的統計和…

PYTORCH_CUDA_ALLOC_CONF基本原理和具體示例

PYTORCH_CUDA_ALLOC_CONFmax_split_size_mb 是 PyTorch 提供的一項環境變量配置&#xff0c;用于控制 CUDA 顯存分配的行為。通過指定此參數&#xff0c;可以有效管理 GPU 顯存的碎片化&#xff0c;緩解因顯存碎片化而導致的 “CUDA out of memory”&#xff08;顯存溢出&#…

Halcon仿射變換---個人筆記

文章目錄 1.概述2.仿射變換類型3.仿射變換流程4.根據特征點、角度計算仿射變換矩陣4.1 從空變換矩陣創建仿射變換矩陣4.2 把旋轉角度添加到仿射變換矩陣4.3 把縮放添加到仿射變換矩陣4.4 把平移添加到防射變換矩陣4.5 把斜切添加到仿射變換矩陣4.6 根據點和角度計算剛性仿射變換…

《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位運維指南》

《深度掌控Linux&#xff1a;openEuler、CentOS、Debian、Ubuntu的全方位運維指南》 一、引言 在當今數字化的時代背景下&#xff0c;Linux操作系統憑借其卓越的性能、可靠性和開源的優勢&#xff0c;在服務器、云計算、嵌入式系統等眾多領域占據著舉足輕重的地位。對于IT運維…

【Webtrees 用戶手冊】第 2 章 - 訪客須知

Webtrees 用戶手冊/訪客指南 信 第 2 章 - 訪客須知 <- 章節概述 目錄 1頁面結構2標題菜單 2.1主題 2.1.1云2.1.2顏色2.1.3絕佳2.1.4最小2.1.5網絡樹2.1.6西妮婭 2.2語言2.3登記2.4搜索字段 3主菜單 3.1家譜3.2圖表3.3列表3.4日歷3.5報告3.6尋找3.7故事3.8常見問題 (FAQ) 4…

動態規劃-918.環形子數組的最大和-力扣(LeetCode)

一、題目解析 聽著有點復雜&#xff0c;這里一圖流。 將環形問題轉化為線性問題。 二、算法原理 1.狀態表示 2.狀態轉移方程 詳細可以移步另一篇博客&#xff0c;53. 最大子數組和 - 力扣&#xff08;LeetCode&#xff09; 3.初始化 由于計算中需要用到f[i-1]和g[i-1]的值&…

飛牛fnNAS遠程映射盤符

目錄 一、NAS、PC端配置Zerotier 二、使用網上鄰居 三、使用WebDAV 1.開啟WebDAV 2.PC上安裝RaiDrive并設置 如果能將NAS作為本機一個盤符來使用,一定會令我非常方便。如果是本地,可以很方便實現。 將飛牛NAS映射為本地盤符,常用兩種方式,一種是網上鄰居,另一種是We…

華為2025年校招筆試手撕真題教程(二)

一、題目 大灣區某城市地鐵線路非常密集&#xff0c;乘客很難一眼看出選擇哪條線路乘坐比較合適&#xff0c;為了解決這個問題&#xff0c;地鐵公司希望你開發一個程序幫助乘客挑選合適的乘坐線路&#xff0c;使得乘坐時間最短&#xff0c;地鐵公司可以提供的數據是各相鄰站點…

SAP ABAP VK11/VK12 創建銷售物料價格(附源碼)

需求: 通過接口批量創建銷售物料的價格(含階梯價),對應事務碼VK11/VK12 方法:(會在下面源碼寫出各個方法的優缺點,僅供參考) 通過函數 RV_CONDITION_COPY創建(目前最優)通過函數 BAPI_PRICES_CONDITIONS通過BDC錄屏使用VK11事務碼進行創建分析: 通過測試可發現,VK…

噪聲建模在一小時:最小化準備工作的自監督低光RAW圖像去噪

論文標題: Noise Modeling in One Hour: Minimizing Preparation Efforts for Self-supervised Low-Light RAW Image Denoising發表日期: 2025年5月作者: Feiran Li, Haiyang Jiang*, Daisuke Iso發表單位: Sony Research, Tokyo University原文鏈接: https://arxiv.org/pdf/25…

Puppeteer 瀏覽器自動化操作工具

pyppeteer 是 Python 版本的 Puppeteer&#xff0c;而 Puppeteer 是由 Google 開發的一個 Node.js 庫&#xff0c;用于控制 Chrome 或 Chromium 瀏覽器。pyppeteer 允許你通過 Python 代碼自動化操作瀏覽器&#xff0c;實現網頁爬取、自動化測試、生成截圖或 PDF 等功能。 核心…

接口性能測試-工具JMeter的學習

接口登錄鏈接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、啟動Jmeter 2、在“測試計劃”下添加線程組 3、在“線程組”下添加“HTTP”取樣器 4、填寫“HTTP請求”的相關請求數據 5、在“線程組”下添加“查看結果樹”監聽器 6、點擊“啟動”按鈕…

mybatis-plus與jsqlparser共用時報sql解析錯誤

手動引入jsqlparser-4.6版本&#xff0c;但mybatis-plus中引用為4.4版本 解決方法一&#xff1a; jsqlparser版本與mybatis-plus中引用版本一致。 解決方法而二&#xff1a; 排除掉mybatis-plus中的jsqlparser。

用MMdetection框架訓練自己的數據集(全流程實戰)

前面我們準備好了COCO格式的數據集&#xff1a;將YOLO格式的數據集轉換為mmdetection格式-CSDN博客https://blog.csdn.net/qq_54708219/article/details/148224187?spm1001.2014.3001.5501 下面我們使用MMdetection開始訓練。 1.創建新的數據集類 首先&#xff0c;在mmdet/d…

VS Code中Maven未能正確讀取`settings.xml`中配置的新路徑

在VS Code中Maven未能正確讀取settings.xml中配置的新路徑&#xff0c;通常是由于以下原因導致的&#xff1a; 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默認配置或指向其他settings.xml文件。解決方法&#xff1a; 手動指定settings.xml路徑…

2021年認證杯SPSSPRO杯數學建模A題(第二階段)醫學圖像的配準全過程文檔及程序

2021年認證杯SPSSPRO杯數學建模 A題 醫學圖像的配準 原題再現&#xff1a; 圖像的配準是圖像處理領域中的一個典型問題和技術難點&#xff0c;其目的在于比較或融合同一對象在不同條件下獲取的圖像。例如為了更好地綜合多種信息來辨識不同組織或病變&#xff0c;醫生可能使用…