HarmonyOS:设置组件导航
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18475745
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
2、首页和非首页具体组成部分:左图为Navigation组件的首页,右图为Navigation组件的非首页。
4、Navigation的每一个组成部分进行具体的讲解:
4.1、标题栏:Navigation支持两种类型的标题栏
(1)、Mini模式:普通标题栏,用于一级页面不需要突出标题的场景。实现方法是,给Navigation组件加上titleMode属性,并配置为NavigationTitleMode.Mini,对应的效果如下图所示:
(2)、Full模式:强调型标题栏,用于一级页面需要突出标题的场景,实现方法是,给Navigation组件加上titleMode属性,配置为NavigationTitleMode.Full,对应的效果如下图所示:可以看到标题进行了突出的显示。
(3)、开发者也可以通过设置Navigation的hideTitleBar为true属性,来进行标题栏的隐藏。
4.2、菜单栏:位于Navigation组件的右上角,不设置时默认不会进行显示,开发者可以通过menus属性进行设置,menus支持Array<NavigationMenuItem>和CustomBuilder两种参数类型。在使用Array<NavigationMenuItem>类型时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。对于NavigationMenuItem的类型,支持配置4个参数:
value参数:表示显示在菜单栏单个选项的文本。
icon参数:表示菜单栏单个选项的图标资源目录。
action参数:当前选项被选中的事件回调函数。
例如此处,创建了两个NavigationMenuItem,分别使用了搜素与添加作为图标,然后使用NavigationMenuItem的menus属性,将配置的NavigationMenuItem组合成数组,作为menus属性的参数。
4.3、工具栏:位于Navigation组件的底部,开发者可以通过toolbarConfiguration属性进行设置。该属性需要传入一个ToolbarItem构成的数组。数组内传入一个value属性,用于标识工具栏单个选项的显示文本,同时可以使用icon配置工具栏选项的图标,用action配置工具栏选项被选中时的回调。
5、模块内页面切换
Navigation组件非常重要的一个部分:页面的跳转以及参数的传递。在使用Navigation组件中,非常重要的一个点就是依靠Navigation组件提供的组件级路由能力,实现更加自然流畅的转场体验,而这就需要依靠路由栈提供的系列方法。下方是push系列方法的相关接口:
(1)、push系列方法:将指定的页面栈数据信息入栈 。
主要有四个方法:pushPath、pushPathByName方法1、pushPathByName方法2、pushDestination。
只以其中的pushPathByName方法1为例进行讲解。其他push方法,开发者可以通过自行查阅官方文档进行学习。pushPathByName有三个参数:
参数1:页面名称。
参数2:页面参数,即需要传递的参数。
参数3:是否启用页面切换动画,默认设置为true。即默认启用页面切换动画。
如下图,使用pushPathByName方法,push了一个名为Page5的页面,并传递了一个param5的参数。
(2)、replace系列方法:将当前页面栈栈顶退出,再将指定的NavDestination页面信息对应的数据进行入栈操作。
主要有两个方法:replacePath、replacePathByName
此处只介绍replacePathByName方法。replacePathByName有三个参数:
参数1:页面名称。
参数2:页面参数,即需要传递的参数。
参数3:是否启用页面切换动画,默认设置为true。即默认启用页面切换动画。
2、Tabs组件的使用:界面结构
底部导航:只需设置Tabs的barPosition为End。
顶部导航:只需设置Tabs的barPosition为Start。
侧边导航:不仅需要设置Tabs的barPosition为Start,还需要设置vertical属性为true。
其中,barPosition参数用于设置Tabs的页签位置。vertical属性用于设置是否为纵向Tab。
3、Tabs组件的使用:controller
Tabs参数中所传入的TabsController实例可以对Tabs显示的TabContent区域进行控制,控制方式是使用实例的changeIndex方法,该方法需要传入一个数值,能控制Tabs显示到对应的索引。为了进行控制Tabs的操作,首先需要将该controller的实例与Tabs组件进行关联,具体的关联方法,是将该实例作为Tabs组件参数的一部分进行传递。关联完成后,可以通过该实例的changeIndex方法,控制TabContent的显示内容。如下图,会控制显示1号索引对应的内容。
4、Tabs组件的使用:自定义TabBar
1、对Navigation组件而言,需要如下操作:
(1)、创建好其对应的路由栈。(2)、创建配置好NavDestination组件。
2、将创建好的路由栈,与Navigation组件以及NavDestination组件进行绑定。
(1)、首先将创建好的路由栈作为参数传递给Navigation组件。
(2)、使用Navigation组件的NavDestination方法来绑定NavDestination组件。
3、给导航栏区域的每一个导航条,加上点击事件,通过路由栈的pushPathByName方法,进行页面跳转以及参数的传递。
4、最后我们在路由子组件里,使用了getParamByIndex方法获取到传递的数据。并根据该数据进行界面的渲染。
四、项目实操,Tabs组件实操,使用自定义TabBar:
上面完成了自定义构建函数tabBarBuilder的实现,接下来可以配置,TabContent的tabBar属性为自定义的TabBar,这样即可实现想要的效果。
接下来只需要给导航栏中的每个项,加上点击事件,并使用tabsController的changeIndex方法,来改变TabContent的内容显示。即可达成下图效果: