鸿蒙Navigation入门使用
Navigation组件适用于模块内和跨模块的路由切换,通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。一次开发,多端部署场景下,Navigation组件能够自动适配窗口显示大小,在窗口较大的场景下自动切换分栏展示效果。
根页面设置
我们在Entry的入口处Index.ets使用Navigation当作根页面,这里会面临一个问题,怎么从启动页跳转到首页,并关闭启动页,使用首页一直留在页面栈中,不允许销毁,在前面的文章《鸿蒙Navigation处理启动页跳转到首页问题》中有介绍处理方法,在此不展开。在使用Navigation时,由于默认带有TitleBar和Toolbar,样式不好自定义,我们直接隐藏TitleBar和Toolbar,实际需要的话,可以自己实现。由于默认是Auto模式,以便于适配大屏设备,若我们在大屏设备上不使用分栏效果,可以强制设置单页面模式。
@Entry
@ComponentV2
struct Index {
nav: NavPathStack = new NavPathStack()
build() {
Navigation(this.nav)
.mode(NavigationMode.Stack)
.hideToolBar(true)
.hideTitleBar(true)
.height('100%')
.width('100%')
}
}
系统路由表配置
接下来我们需要配置系统路由表,在resources/base/profile目录下新建一个json文件,例如router_map.json,并在里面配置相关的路由页面,例如我们配置一个弹窗页面和一个登录页面。
{
"routerMap": [
{
"name": "dialog",
"pageSourceFile": "src/main/ets/pages/dialog/DialogPage.ets",
"buildFunction": "dialogBuilder"
},
{
"name": "login",
"pageSourceFile": "src/main/ets/pages/login/LoginPage.ets",
"buildFunction": "loginBuilder"
}
]
}
在routerMap里面配置具体的页面,name为页面名称,使用push打开新页面时,传的name名称就是这里定义的。pageSourceFile为页面源文件,buildFunction为页面入口builder,通过源文件找到这个入口builder。在module.json5文件中有一个routerMap字段,值为我们前面定义的router_map.json
实现子页面
路由表字义好了后,我们需要实现具体的页面,这里分别实现一个弹窗页面和标准页面。弹窗示例如下,页面模式需要设置为NavDestinationMode.DIALOG
@Builder
function dialogBuilder() {
DialogPage()
}
@ComponentV2
export struct DialogPage {
build() {
NavDestination() {
Stack() {
Column() {
Text('弹窗标题')
Text('弹窗内容')
Row() {
Text('取消').layoutWeight(1)
Text('确定').layoutWeight(1)
}
}
.width('80%')
.borderRadius(16)
.backgroundColor($r('app.color.start_window_background'))
}.width('100%').height('100%')
}.hideTitleBar(true).mode(NavDestinationMode.DIALOG)
}
}
标准登录页面如下,默认为标准模式,mode可以省略不设置
@Builder
function loginBuilder() {
LoginPage()
}
@ComponentV2
export struct LoginPage {
build() {
NavDestination() {
Column() {
Text('账号')
Text('密码')
Text('登录')
}
}
.width('100%')
.height('100%')
.hideTitleBar(true)
}
}
页面跳转操作
打开新页面
使用NavPathStack的pushPath或pushPathByName可以打开一个新页面,例如打开登录页面则是navPathStack.pushPathByName('login', undefined),显示一个弹窗则是navPathStack.pushPathByName('dialog', undefined)。可以发现使用Navigation来实现弹窗还是非常简单的,而且可以全局显示,不依赖于具体页面以及Context,而且弹窗还有显示隐藏等回调。
返回页面
使用NavPathStack的pop方法关闭当前页面,回到上一个页面,我们还可以使用popToName返回到指定的页面,也可以使用popToIndex返回到第几个页面,甚至还可以使用clear方法直接回到首页,使用起来还是非常方便的。
鸿蒙Navigation入门使用的更多相关文章
- Android开发 navigation入门详解
前言 Google 在2018年推出了 Android Jetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation. 字面意思是导航,但是除了做APP引导页面 ...
- Android Navigation使用
简介 Navigation导航编辑器旨在简化Android开发中导航的实现,可以帮助我们很好的处理Activity和fragment之间通过FragmentTransaction交互的复杂性,也可以很 ...
- Android开发 navigation的跳转动画实现
前言 此篇博客只简短的介绍navigation如何添加跳转页面的动画属性,如果你还为接触了解过navigation.建议你看我另一篇博客Android开发 navigation入门详解 创建动画xml ...
- ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation
ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- Android Navigation 架构组件入门教程
Android Navigation 架构组件入门教程 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:https://www.cnblogs.com/cavalier-/p/1 ...
- 鸿蒙OS前端开发入门指南:网络图片_Image渲染网络图片
目录: 1.开启明文传输 2.权限申请 3.引入http插件 4.案例展示 5.<鸿蒙OS前端开发入门指南>文章合集 开启明文传输 在config.json配置文件添加如下配置(如果不开启 ...
- SuperMap iClient for JavaScript 新手入门
地理信息系统(英语:Geographic Information System,缩写:GIS)是一门综合性学科,结合地理学与地图学,已经广泛的应用在不同的领域,是用于输入.存储.查询.分析和显示地理数 ...
- Struts2的经典入门
一:Struts2的起源与背景 在了解Struts2之前我们先来聊聊Struts1,我们都知道在很长的一段时间内,所有的MVC框架中,Struts1他是处于一个超级大咖的地位,无论是从市场角度和使用的 ...
- Struts2入门(一)——环境搭建和简单例子(Struts2 2.5.2版本)
一.前言 1.了解三大框架 什么是框架? 框架是一种规范,一种规则,一种把技术组织起来的规则,这就是框架. 什么是三大框架(SSH),Struts.hibernate和spring的作用是什么? St ...
- 【Bootstrap Demo】入门例子创建
本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快 ...
随机推荐
- Python的OpenCV转换图像大小
在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理.模型输入等.下面是一个详细的代码示例,展示了如何使用Open ...
- LaTeX hyperref 包去掉链接方框
\usepackage[hidelinks]{hyperref}
- Go channel 介绍
Go 语言(Golang)中的 chan 是通道(channel)的缩写,用于在不同的 goroutine 之间进行通信.通道允许你在 goroutine 之间传递数据,从而实现同步和共享内存.下面是 ...
- 【Git代码仓库】之合并分支代码操作到主干代码上(界面版/命令版)
一.代码管理仓库,合并分支代码到主干(界面版*) 1.从远程Git代码仓库克隆到本地 # Git克隆 git clone git@e.coding.net:XXX/SQM/SC_WEB_Project ...
- Python新手爬虫二:爬取搜狗图片(动态)
经过上一期爬取豆瓣影评成功后,感觉爬虫还不错,于是想爬点图片来玩玩... 搜狗图片地址:https://pic.sogou.com/?from=category 先上最后成功的源码(在D盘下创建sou ...
- python 读取mysqlDB中指定的表名的DDL语句
注意: 1. 此python文件不要起名为mysql,会跟import的包名重复,python mysql.py运行报错 2.如果需要带端口号,请加database后加上, port="33 ...
- 如何高效的阅读paper--三遍阅读法
第一遍 1.阅读文章的标题.摘要和介绍 2.阅读每一节的标题和副标题 3.阅读总结 4.浏览参考文献,看看是否有曾经读过的文章 在完成第一遍后,应该做到: 1.能够说出该篇论文的类型 2.能够说出文章 ...
- sicp每日一题[1.44]
Exercise 1.44 The idea of smoothing a function is an important concept in signal processing. If f is ...
- 使用 nuxi init 创建全新 Nuxt 项目
title: 使用 nuxi init 创建全新 Nuxt 项目 date: 2024/9/6 updated: 2024/9/6 author: cmdragon excerpt: 摘要:本文介绍了 ...
- C语言实现一个走迷宫小游戏(深度优先算法)
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C++的语法(使用Dev-C++并且文件扩展名为.cpp的没有影响),如果有的朋友使用的语言标准是VC6的话可能不支持,所以在修改过后再上传一版, ...