第四篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:TabBar和Navbar实现页面切换

本文主要是介绍第四篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:TabBar和Navbar实现页面切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传奇开心果短博文系列

  • 系列短博文目录
    • 鸿蒙开发技术点案例示例短博文系列
  • 短博文目录
    • 一、前言
    • 二、给Index.ets添加TabBar组件
    • 三、用TabBar组件实现页面切换
    • 四、给Index.ets添加Navbar组件
    • 五、使用Navbar独立实现页面切换
    • 六、Navbar和TabBar同时在Index.ets主页实现各自独立的页面切换

系列短博文目录

鸿蒙开发技术点案例示例短博文系列

短博文目录

一、前言

除了前面页面路由实现页面切换,使用组件TabBar和Navbar也能实现页面切换。搭配使用可以更加灵活多样的实现页面切换。
页面切换1

二、给Index.ets添加TabBar组件

鸿蒙套件以下是在给定代码中添加TabBar的示例:

//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {//装饰器,指状态变量,字符串类型,赋值:"Hello World'@State message: string = "Hello World";//装饰器,指状态变量,整数类型,赋值:0@State selectedIndex: number = 0;//构造函数,UI声明build() {//垂直布局组件Column() {//TabBar组件TabBar(//绑定选中索引selectedIndex: this.selectedIndex,//回调函数,处理选项卡切换事件onTabChanged: (index) {this.selectedIndex = index;},) {//Tab项1TabItem(//设置图标icon: Icon(Icons.home),//设置文本text: 'Home',);//Tab项2TabItem(//设置图标icon: Icon(Icons.settings),//设置文本text: 'Settings',);}//根据选中索引渲染对应的内容if (this.selectedIndex == 0) {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text(this.message)//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}} else if (this.selectedIndex == 1) {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('Settings')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}}//设置页面高度占比百分比.height('100%');}
}

在给定的代码中,我们添加了一个TabBar组件,用于切换不同的内容。首先,在构造函数中添加了一个selectedIndex状态变量,用于跟踪当前选中的Tab项。然后,在Column布局组件中添加了TabBar组件,并将selectedIndex绑定到选中索引上,并通过onTabChanged回调函数处理选项卡切换事件。接下来,在TabBar中添加了两个TabItem,分别代表"Home"和"Settings"两个选项卡。根据selectedIndex的值,我们在Column布局组件中渲染不同的内容。如果selectedIndex为0,则渲染显示"Home"的内容;如果selectedIndex为1,则渲染显示"Settings"的内容。

请注意,这只是一个简单示例,实际应用中您可以根据需要进行更复杂的布局和内容渲染。同时,您可能还需要根据具体框架或库的要求进行相应的调整和修改。

三、用TabBar组件实现页面切换

页面切换2以下是一个示例代码,演示如何使用TabBar切换不同的页面:

//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {//装饰器,指状态变量,整数类型,赋值:0@State selectedIndex: number = 0;//构造函数,UI声明build() {//垂直布局组件Column() {//TabBar组件TabBar(//绑定选中索引selectedIndex: this.selectedIndex,//回调函数,处理选项卡切换事件onTabChanged: (index) {this.selectedIndex = index;},) {//Tab项1TabItem(//设置文本text: 'Page 1',);//Tab项2TabItem(//设置文本text: 'Page 2',);}//根据选中索引渲染对应的页面if (this.selectedIndex == 0) {//页面1Page1();} else if (this.selectedIndex == 1) {//页面2Page2();}}}
}//自定义组件,页面1
struct Page1 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 1')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,页面2
struct Page2 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 2')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}

在给定的代码中,我们添加了两个自定义组件Page1和Page2,分别表示两个不同的页面。在Index组件的build方法中,根据selectedIndex的值来渲染不同的页面。当selectedIndex为0时,渲染Page1组件;当selectedIndex为1时,渲染Page2组件。同时,我们使用TabBar组件来切换不同的页面。通过onTabChanged回调函数,当选项卡切换时,更新selectedIndex的值,从而触发页面的重新渲染。

请注意,这只是一个简单示例,实际应用中您可以根据需要进行更复杂的布局和内容渲染。同时,您可能还需要根据具体框架或库的要求进行相应的调整和修改。

四、给Index.ets添加Navbar组件

鸿蒙3以下是在给定代码中添加Navbar的示例:

//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {//装饰器,指状态变量,整数类型,赋值:0@State selectedIndex: number = 0;//构造函数,UI声明build() {//垂直布局组件Column() {//Navbar组件Navbar(//设置标题title: 'My App',);//TabBar组件TabBar(//绑定选中索引selectedIndex: this.selectedIndex,//回调函数,处理选项卡切换事件onTabChanged: (index) {this.selectedIndex = index;},) {//Tab项1TabItem(//设置文本text: 'Page 1',);//Tab项2TabItem(//设置文本text: 'Page 2',);}//根据选中索引渲染对应的页面if (this.selectedIndex == 0) {//页面1Page1();} else if (this.selectedIndex == 1) {//页面2Page2();}}}
}//自定义组件,页面1
struct Page1 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 1')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,页面2
struct Page2 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 2')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}

在给定的代码中,我们添加了一个Navbar组件,用于显示应用的标题。在Index组件的build方法中,首先添加了Navbar组件,并设置了标题为"My App"。然后,再添加了TabBar组件来切换不同的页面。通过onTabChanged回调函数,当选项卡切换时,更新selectedIndex的值,从而触发页面的重新渲染。根据selectedIndex的值,我们在Column布局组件中渲染不同的页面。如果selectedIndex为0,则渲染Page1组件;如果selectedIndex为1,则渲染Page2组件。

请注意,这只是一个简单示例,实际应用中您可以根据需要进行更复杂的布局和内容渲染。同时,您可能还需要根据具体框架或库的要求进行相应的调整和修改。

五、使用Navbar独立实现页面切换

鸿蒙4以下是一个示例代码,使用Navbar独立实现切换不同的页面:

//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {//装饰器,指状态变量,整数类型,赋值:0@State selectedIndex: number = 0;//构造函数,UI声明build() {//垂直布局组件Column() {//Navbar组件Navbar(//设置标题title: 'My App',//设置左侧按钮leading: Icon(Icons.menu),//设置右侧按钮trailing: Icon(Icons.search),//设置左侧按钮点击事件onLeadingTap: () {//处理左侧按钮点击事件},//设置右侧按钮点击事件onTrailingTap: () {//处理右侧按钮点击事件},);//根据选中索引渲染对应的页面if (this.selectedIndex == 0) {//页面1Page1();} else if (this.selectedIndex == 1) {//页面2Page2();}//底部导航栏BottomNavigationBar(//绑定选中索引currentIndex: this.selectedIndex,//回调函数,处理导航项切换事件onTap: (index) {this.selectedIndex = index;},//导航项列表items: [BottomNavigationBarItem(//设置图标icon: Icon(Icons.home),//设置文本label: 'Page 1',),BottomNavigationBarItem(//设置图标icon: Icon(Icons.settings),//设置文本label: 'Page 2',),],);}}
}//自定义组件,页面1
struct Page1 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 1')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,页面2
struct Page2 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Page 2')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}

在给定的代码中,我们使用Navbar组件实现了顶部导航栏,并使用BottomNavigationBar组件实现了底部导航栏。通过设置currentIndex来绑定选中索引,并通过onTap回调函数处理导航项切换事件。根据selectedIndex的值,我们在Column布局组件中渲染不同的页面。如果selectedIndex为0,则渲染Page1组件;如果selectedIndex为1,则渲染Page2组件。

请注意,这只是一个简单示例,实际应用中您可以根据需要进行更复杂的布局和内容渲染。同时,您可能还需要根据具体框架或库的要求进行相应的调整和修改。

六、Navbar和TabBar同时在Index.ets主页实现各自独立的页面切换

鸿蒙5以下是一个示例代码,演示如何在Index主页上同时使用Navbar和TabBar实现各自独立页面切换:

//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {//装饰器,指状态变量,整数类型,赋值:0@State navbarSelectedIndex: number = 0;@State tabBarSelectedIndex: number = 0;//构造函数,UI声明build() {//垂直布局组件Column() {//Navbar组件Navbar(//设置标题title: 'My App',//设置左侧按钮leading: Icon(Icons.menu),//设置右侧按钮trailing: Icon(Icons.search),//设置左侧按钮点击事件onLeadingTap: () {//处理左侧按钮点击事件},//设置右侧按钮点击事件onTrailingTap: () {//处理右侧按钮点击事件},);//根据navbarSelectedIndex渲染对应的Navbar页面if (this.navbarSelectedIndex == 0) {//Navbar页面1NavbarPage1();} else if (this.navbarSelectedIndex == 1) {//Navbar页面2NavbarPage2();}//TabBar组件TabBar(//绑定选中索引selectedIndex: this.tabBarSelectedIndex,//回调函数,处理选项卡切换事件onTabChanged: (index) {this.tabBarSelectedIndex = index;},) {//Tab项1TabItem(//设置文本text: 'Tab 1',);//Tab项2TabItem(//设置文本text: 'Tab 2',);}//根据tabBarSelectedIndex渲染对应的TabBar页面if (this.tabBarSelectedIndex == 0) {//TabBar页面1TabBarPage1();} else if (this.tabBarSelectedIndex == 1) {//TabBar页面2TabBarPage2();}}}
}//自定义组件,Navbar页面1
struct NavbarPage1 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Navbar Page 1')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,Navbar页面2
struct NavbarPage2 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is Navbar Page 2')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,TabBar页面1
struct TabBarPage1 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is TabBar Page 1')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}//自定义组件,TabBar页面2
struct TabBarPage2 {build() {//横向布局组件Row() {//嵌套纵向布局组件Column() {//文本组件,参数Text('This is TabBar Page 2')//设置字号.fontSize(50)//设置字体粗细.fontWeight(FontWeight.Bold);}//设置页面宽度占比百分比.width('100%');}}
}

鸿蒙7_在给定的代码中,我们在Index组件的build方法中同时使用了Navbar和TabBar组件。根据navbarSelectedIndex和tabBarSelectedIndex的值,分别渲染对应的Navbar页面和TabBar页面。

鸿蒙6请注意,这只是一个简单示例,实际应用中您可以根据需要进行更复杂的布局和内容渲染。同时,您可能还需要根据具体框架或库的要求进行相应的调整和修改。

这篇关于第四篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:TabBar和Navbar实现页面切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646143

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作