鸿蒙仓颉开发语言实战教程:自定义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 = 0
Stack(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语言##仓颉##购物#
鸿蒙仓颉开发语言实战教程:自定义tabbar的更多相关文章
- 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)
用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...
- 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)
第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...
- iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
本文转自迅为开发板:http://www.topeetboard.com 在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编 ...
- iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]
自定义tabbar与按钮的添加 01 - 把系统的tabbar用我们自己的覆盖 LHQTabBar *lhqTabBar = [[LHQTabBar alloc]init]; [self setVal ...
- go语言实战教程:实战项目资源导入和项目框架搭建
从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...
- go语言实战教程之 后台管理页面统计功能开发(2)
上节内容介绍了后台管理页面统计功能开发(1),从功能介绍,到接口请求分析和归类,最后是代码设计.经过上节内容的介绍,已经将业务逻辑和开发逻辑解释清楚,本节内容侧重于编程代码实现具体的功能. 当日增长数 ...
- go语言实战教程之 后台管理页面统计功能开发(1)
本节内容我们将学习开发实现后台管理平台页面统计功能开发的功能接口,本章节内容将涉及到多种请求路由的方式. 功能介绍 后台管理平台不仅是功能管理平台,同时还是数据管理平台.从数据管理平台角度来说,在管理 ...
- go语言实战教程之管理员查询功能、退出功能
前面第10节课内容中已经学习开发完成了管理员登陆功能.本节课我们将继续学习开发完成管理员信息查询功能.管理员退出功能 管理员信息查询功能 请求及路由映射 管理员信息查询接口 接口名称:获取管理员信息. ...
- go语言实战教程:项目文件配置和项目初始化运行
在上节内容中,我们已经搭建了实战项目框架,并将实战项目开发所需要的静态资源文件进行了导入.在本节内容中,我们将讲解如何通过相关的配置,并初始化运行项目. conf配置文件读取配置信息 我们前面说过,使 ...
- go语言实战教程:Redis实战项目应用
项目Redis配置 在实战项目中使用Redis功能,首先需要进行Redis配置.本实战项目中,关与Redis的配置项包含:连接类型.地址.端口.公共前缀.以上配置项被定义包含在Iris框架的redis ...
随机推荐
- c++常量引用,通过被引用变量修改数据无法同步到引用
正常情况下被引用的对象改变,常量引用的值也跟着改变.i和j是同一个对象,所以是同步的: int i = 42; const int& j = i; i = 43; cout << ...
- python xlrd xlwr函数 读取excel好文总结
https://www.cnblogs.com/python-robot/p/9958352.html 官网: http://www.python-excel.org/ 好文: https://www ...
- 下载文件,后端返回的是文件流,我们需要请求并下载到本地,发现下载后打开只有个undefined
在项目里做完上传,做下载的时候,把下载的文件打开,内容却时undefined,而且接口调用成功,但是postman校验接口时下载的文件正常的,那问题又出现在前端了. 我的前端代码如下图 前端代码的话我 ...
- 使用Istio灰度发布
目录 灰度发布 1. Istio 1.1 Istio介绍 1.2 Istio是如何工作的 2. 安装Istio 2.1 环境 2.2 得到二进制文件 2.3 安装istio 3. 部署bookinfo ...
- 实验一:Tableau数据可视化入门
实验目的: 1.熟悉TableauDesktop使用方法. 2.通过Tableau软件来实现Excel中数据的基本可视化. 实验原理: Tableau是新一代商业智能工具软件,它将数据连接.运算.分析 ...
- breach1靶机渗透学习
靶机下载 https://www.vulnhub.com/ 找Breach-1.0,不过这个是老靶机了,可以看网上其他博客附带有靶机下载的网盘链接,靶机官网访问很慢而且网站好像出问题了排版很乱,不打也 ...
- 如何不购买域名在云服务器上搭建HTTPS服务
step 1: 事前准备 step 1.1: 云服务器 购买一台云服务器(带有弹性公网IP),阿里云,腾讯云,华为云什么的都可以. 选择ubuntu系统 开放安全组策略(把你需要的协议/端口暴露出来) ...
- Apollo批量给新创建的用户授可编辑权限
背景: 我们要在Apollo中批量给新创建的用户授可编辑权限 apollo系统版本: java-2.1.0 管理员账号:Apollo 可编辑账号:guoyabin 过程: 在没写这段代码的时候从网上搜 ...
- 方法重写-java se 进阶-day01
1.方法重写的介绍 当子父类中,某方法存在相同的定义(方法名.参数.返回值)时,子类的方法会将父类的方法进行重写操作(覆盖) 2.方法重写与方法重载的区别 1.方法重载:又称Overload,在同一个 ...
- redis-dump教程
1.安装ruby 安装教程:https://www.cnblogs.com/wanyuan/p/11217397.html 安装完成后在DOS窗口输入ruby -v查看当前版本 2.安装redis-d ...