鸿蒙仓颉开发语言实战教程:自定义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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;医生可能使用…