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

使用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

http://www.xdnf.cn/news/1006.html

相关文章:

  • SPI通信
  • 7. 深入Spring AI:刨析 Advisors 机制
  • 4月21日日记
  • vue2解析html中的公式,使用vue-katex
  • 科学养生指南:解锁健康生活新方式
  • 强化学习框架verl源码学习-快速上手之如何跑通PPO算法
  • 【C++11】线程库、锁、条件变量、原子操作
  • Kubernetes相关的名词解释Containerd(14)
  • 【Redis】Redis 特性
  • 【刷题Day22】TCP(浅)
  • 辛格迪客户案例 | 上海科济药业细胞治疗生产及追溯项目(CGT)
  • python中相对路径导包的py文件运行方式
  • 基于多模态融合算法的航空武器毁伤评估技术方案
  • Ethan独立开发产品日报 | 2025-04-20
  • 基于STM32的HX711货物称重系统
  • Qt界面控件中点击触发处理耗时业务的方法
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • Python学习电子书资料
  • 2025年在Ai时代下,前端如何提升
  • 精密环境守护者:M-1J1R ROSAHL 电解除湿器,重塑激光设备稳定性边界
  • 布尔差分法解析:从逻辑导数到电路优化
  • 17.整体代码讲解
  • RAG(检索增强生成) 和 Agent(智能体) 在 AI 应用开发中的核心对比分析,涵盖定义、技术架构、适用场景及优缺点
  • python@abstractmethod 是什么含义?
  • [陇剑杯 2021]内存分析(问2)
  • Maven插件管理的基本原理
  • [陇剑杯 2021]内存分析(问1)
  • Spring AI MCP
  • 计算机组成与体系结构:存储器(Memory)
  • Unity使用Rider的常用快捷键