当前位置: 首页 > news >正文

使用tabs组件搭建UI框架

本节任务

  1. 使用tabs组件搭建ui框架

    包含页签:首页、动态、发布,会员购、我的。

涉及内容:

  1. Tabs、TabContent组件
  2. @Builder装饰器
  3. 属性模型封装,包括:接口、枚举、常量

界面原型

在这里插入图片描述

1 Tabs布局

在MainPage(如果没有创建该页面需提前创建)中删除原有代码,仅保留框架代码:

@Entry
@Component
struct MainPage {build() {}
}

使用tabs布局:

    Tabs({barPosition:BarPosition.End}){TabContent(){Text('首页')}.tabBar('首页')TabContent(){Text('动态')}.tabBar('动态')TabContent(){Text('发布')}.tabBar('发布')TabContent(){Text('会员购')}.tabBar('会员购')TabContent(){Text('我的')}.tabBar('我的')}.width('100%').height('100%')

预览效果:

在这里插入图片描述

2 TabBuilder定制

准备tab图标,可以统一图标风格,方便后续扩展:

https://iconpark.oceanengine.com/official

在这里插入图片描述

1)首先定义变量,保存当前页面索引

...
struct MainPage {@State pageIndex: number = 0;//页面索引...

2)封装tabitem

在ets下新建文件夹,命名为model,在model中新建arkts文件,命名为TabItemModel.

对tab进行封装:

export interface TabItem {icon: Resource;icon_selected: Resource;title?: string;id: number;
}//tab id
export enum TabID {HOME, //首页COMMUNITY, //动态PUBLISH,  // 发布SHOPPING, // 会员购MINE  //我的
}export const TabItemList: TabItem[] = [{icon:$r('app.media.home0'),icon_selected:$r('app.media.home1'),title: '首页',id: TabID.HOME},{icon:$r('app.media.dongtai0'),icon_selected:$r('app.media.dongtai1'),title: '动态',id: TabID.COMMUNITY},{icon:$r('app.media.fabu0'),icon_selected:$r('app.media.fabu1'),id: TabID.PUBLISH},{icon:$r('app.media.shopping0'),icon_selected:$r('app.media.shopping1'),title: '会员购',id: TabID.SHOPPING},{icon:$r('app.media.mine0'),icon_selected:$r('app.media.mine1'),title: '我的',id: TabID.MINE}
]

3)开始定制tabbar,在MainPage组件内编写代码:

  @Builder MyTabBuilder(idx: number){Column() {Image(idx === this.pageIndex ? TabItemList[idx].icon_selected: TabItemList[idx].icon).width(32).height(32)Text(TabItemList[idx].title).fontSize(14).fontWeight(FontWeight.Bold).fontColor(this.pageIndex === idx ? '#ff7fa6cf':'#888')}}

4)在build函数中调用,并控制页签换页:

  build() {Tabs({barPosition:BarPosition.End}){TabContent(){Text('首页')}//.tabBar('首页').tabBar(this.MyTabBuilder(TabID.HOME))TabContent(){Text('动态')}//.tabBar('动态').tabBar(this.MyTabBuilder(TabID.COMMUNITY))TabContent(){Text('发布')}//.tabBar('发布').tabBar(this.MyTabBuilder(TabID.PUBLISH))TabContent(){Text('会员购')}//.tabBar('会员购').tabBar(this.MyTabBuilder(TabID.SHOPPING))TabContent(){Text('我的')}//.tabBar('我的').tabBar(this.MyTabBuilder(TabID.MINE))}.width('100%').height('100%').onChange((index)=>{this.pageIndex = index;//控制换页})}

预览效果:

首页:

在这里插入图片描述

动态:

在这里插入图片描述

发布:

在这里插入图片描述

会员购:

在这里插入图片描述

我的:

在这里插入图片描述

代码仓:

https://gitee.com/snowyvalley/harmony-app-dev-basic-course.git

相关文章:

  • 4月21日日记
  • 基于MuJoCo物理引擎的机器人学习仿真框架robosuite
  • Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
  • 服务器监控软件推荐
  • SpringBoot中PDF处理完全指南
  • 报错 | 配置 postcss 出现 报错:A `require()` style import is forbidden.
  • Android Studio 国内镜像使用与 SDK 下载速度优化指南
  • 华为盒式交换机堆叠配置
  • C语言高频面试题——指针数组和数组指针
  • idea30天使用无限使用
  • Python-Django系列—部件
  • 国产DTU!工业DTU“性能翻倍+功耗减半”双突破!
  • 你学会了些什么211201?--http基础知识
  • Tez原理
  • OpenCV 图形API(44)颜色空间转换-----将图像从 BGR 色彩空间转换为 RGB 色彩空间函数BGR2RGB()
  • C++23 让 Lambda 表达式中的 () 更可选:P1102R2 提案深度解析
  • 在Ubuntu上查看PCL(Point Cloud Library)的版本
  • NLP高频面试题(四十九)大模型RAG常见面试题解析
  • SystemVerilog语法之定宽数组
  • 年化112.5%,最大回撤24.3%,卡玛比率4.62 | polars因子引擎重构完成(python源代码下载)
  • 年近九旬的迪图瓦,指挥能量比盛年更为强劲
  • 金价新高不断,上金所再发风险提示,黄金能否持续闪耀?
  • 87岁老人花3万多做“血液净化”延年益寿?医院“张主任”:我那是善意的欺骗
  • 大尺度色情语聊、撮合卖淫嫖娼!一些交友软件暗藏“桃色陷阱”
  • 专访|松重丰:“美食家”不孤独,他在自由地吃饭
  • 泽连斯基称乌克兰全境响起防空警报