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

鸿蒙_组件导航Navigation的原理

在鸿蒙应用的开发中,我们知道独立页面的创建一般都是在DevEco Studio中通过“新建-Page-Empty Page”生成的,这种页面是基本的入口页面,做过网站开发的都知道,这可以看成是类似网站中的一个独立网页(html页面),那么组件导航又是什么呢,可以看成是在一个html页面内多个的“div层”,但同时只显示一个(单页面应用),宿主就是当前所在的页面。如果你还是没有明白,那么我们通过新建一个TestNavigation页面来测试一下:

@Entry @Component struct TestNavigation { @State message: string = 'Test Navigation Page'; //定义一个页面栈(用于管理页面,记录页面路径信息及访问顺序等) navPathStack: NavPathStack = new NavPathStack() //自定义构建函数(用来承载多个页面内容) @Builder builderPages(name: string) { if (name === 'pageOne') { //页面1内容要放到导航目标内 NavDestination() { Text('NavDestination:pageOne').fontColor(Color.Red) } } else if (name === 'pageTwo') { //页面2内容也要放到导航目标内 NavDestination() { Row() { Text('NavDestination:pageTwo').fontColor(Color.Orange) } } } } build() { Column() { Text(this.message) .fontSize(26) .fontWeight(FontWeight.Bold) .onClick(() => { this.message = 'Welcome'; }) //组件导航(参数必传页面栈) Navigation(this.navPathStack) { //这里写根页面 Text('Navigation Root Page') .fontSize(22) .margin({ top: 30, bottom: 10 }) Button('pushPath pageOne', { stateEffect: true, type: ButtonType.Capsule }) .width('80%') .margin(20) .onClick(() => { this.navPathStack.pushPath({ name: 'pageOne' }); }) Button('pushPath pageTwo', { stateEffect: true, type: ButtonType.Capsule }) .width('80%') .onClick(() => { this.navPathStack.pushPath({ name: 'pageTwo' }); }) } .navDestination(this.builderPages) //这里也是必须加的,传多个页面的构建函数 .border({ width: 1, color: Color.Black }) .margin(30) .backgroundColor(Color.Pink) } .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) .padding(10) .expandSafeArea( [SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM] ) .backgroundColor(Color.Yellow) .height('100%') .width('100%') } }

在本次的测试中,我们把Navigation放到页面中,并且设置了一个足够大的外边距(margin),并用底色加以区分,可以看到亮色的部分为Test NavigationPage底板,而Navigation包裹起来的整体作为承载了组件导航的区域(图一粉色部分),当我们点击“pushPath pageOne”按钮时,会触发组件导航内部目标页的跳转到二级页面(图二白色部分),但是始终都没有超出Navigation的区域,而亮色底板没有任何变化,这就是组件导航的原理,可以看成是页面上一个可以独立控制多个子组件切换显示隐藏的特殊组件。


运行效果如下:

http://www.cnnetsun.cn/news/1819291.html

相关文章:

  • WorkshopDL:革命性跨平台Steam创意工坊模组下载解决方案
  • Qwen3-4B-Thinking模型在教育场景的应用:GPT-5-Codex风格编程教学助手
  • Jenkins:DevOps 自动化中枢
  • Next.js从入门到实战保姆级教程:图像、字体与媒体优化
  • 网盘文件直链获取终极指南:八大平台免费下载解决方案
  • 后敏捷时代:DevOps、平台工程与研发效能的再思考
  • 【数据驱动新范式】MODA:如何用首个大规模多光谱航拍数据集,破解无人机小目标检测难题?
  • 防反电路的讨论
  • 16核心精准调控:AMD Ryzen处理器深度调试实战指南
  • Ostrakon-VL 在软件测试中的应用:自动化验证图形用户界面
  • 高级算法面试五十题深度解析,算法工程师面试必备
  • 终极qmcdump指南:3分钟解锁QQ音乐加密音频的完整方案
  • Ostrakon-VL-8B处理复杂文档效果实测:合同、报表与学术论文
  • AI显微镜Swin2SR场景应用:为AI绘画作品进行高清后期
  • Lychee-Rerank快速入门:三步完成星图GPU平台镜像部署与测试
  • 机器人手眼标定避坑指南:C#九点标定中矩阵计算的那些‘坑’与最佳实践
  • 从零开始:cv_unet_image-matting图像抠图环境配置与快速入门
  • yfinance:构建金融数据质量保障的智能修复引擎
  • PyTorch 2.8镜像商业应用:广告公司批量生成短视频素材的生产环境实践
  • HsMod:如何让炉石传说效率提升8倍并实现完全个性化体验
  • 三场正交视角下中日二次元文化异化与文明底层逻辑研判报告
  • 阿里云百炼工业质检省钱指南:如何用弹性扩缩和边缘盒子把推理成本降70%
  • 手把手教你用Ollama部署Qwen2.5-VL-7B,图片识别、视频理解轻松搞定
  • DeOldify一键部署详解:Anaconda环境管理与依赖隔离
  • 软件分享-第一期:SBTI人格测试软件
  • 千问3.5-2B辅助Anaconda环境管理:智能解决包依赖冲突
  • 手机号查询QQ号:3分钟找回遗忘账号的Python神器
  • FreeRTOS时间片调度详解:从原理到调试技巧(含串口调试实战)
  • Star CCM+ 实战:旋风分离器(cyclone separator)体网格生成与优化策略
  • 别再瞎清理C盘了!我用这款工具,256GB盘腾出60G,新手零踩坑