当前位置:   article > 正文

第九节HarmonyOS 常用基础组件24-Navigation

第九节HarmonyOS 常用基础组件24-Navigation

1、描述

Navigation组件一般作为Page页面的根容器,通过属性设置来展示的标题栏、工具栏、导航栏等。

2、子组件

可以包含子组件,推荐与NavRouter组件搭配使用。

3、接口

Navigation()

4、属性

名称

参数类型

描述

title

string|NavigationCommonTitle|NavigationCustomTitle| CustomBuilder

页面标题

menus

Array<NavigationMenuItem>| CustomBuilder

页面右上角菜单。使用Array<NavigationMenuItem>写法时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被自动放入自动生成的更多图标。

titleMode

NavigationTitleMode

页面标题栏显示模式。

默认值:NavigationTitleMode.Free

toolBar

object|CustomBuilder

设置工具栏内容。

Items:工具栏所有项

Items均分底部工具栏,在每个均分内容布局文本和图标,文本超长时,逐级缩小,缩小之后换行,最后...截断。

hideToolBar

boolean

隐藏工具栏。

默认值:false

true:隐藏工具栏

false:显示工具栏

hideTitleBar

boolean

隐藏标题栏。

默认值:false

true:隐藏标题栏

false:显示标题栏

hideBackButton

boolean

隐藏返回键。不支持隐藏Navigation组件标题栏中的返回图标。

默认值:false

说明:

返回键仅针对titleMode为NavigationTitleMode.Min时才生效。

navBarWidth

Length

导航栏宽度。

默认值:200vp

说明:仅在Navigation组件分栏时生效。

navBarPosition

NavBarPosition

导航栏位置。

默认值:NavBarPosition.Start

说明:仅在Navigation组件分栏时生效。

mode

NavigationMode

导航栏的显示模式。

默认值:NavigationMode.Auto

自适应:基于组件的宽度自适应单栏和双栏。

backButtonIcon

string|PixeMap|Resource

设置导航栏返回图标。

hideNavBar

boolean

是否显示导航栏(仅在mode为NavigationMode.Split时生效)

  1. 属性中一些类型的说明

Menus -> NavigationMenuItem类型说明

名称

类型

必填

描述

value

string

菜单栏单个选项的显示文本。

icon

string

菜单栏单个选项的图标资源路径。

action

() => void

当前选项被选中的事件回调。

toolBar -> object类型说明

名称

类型

必填

描述

value

string

工具栏单个选项的显示文本。

icon

string

工具栏单个选项的图标资源路径。

action

() => void

当前选项被选中的事件回调。

titleMode -> NavigationTitleMode枚举说明

名称

描述

Free

当内容为可滚动组件时,标题随着内容向上滚动而缩小(子标题的大小不变、淡出)。向下滚动内容时则恢复原样。

Mini

固定为小图标模式。

Full

固定为大图标模式。

NavBarPosition枚举说明

名称

描述

Start

双栏显示时,主列在主轴方向首部。

End

双栏显示时,主列在主轴方向尾部。

NavigationMode枚举说明

名称

描述

Stack

导航栏与内容区独立显示,相当于两个页面。

Split

导航栏与内容区分两栏显示。

Auto

窗口宽度>=520vp时,采用Split模式显示;窗口宽度<520vp时,采用Stack模式显示。

TitleHeight枚举说明

名称描述
MainOnly只有主标题时标题栏的推荐高度(56vp)。
MainWithSub同时有主标题和副标题时标题栏的推荐高度(82vp)。

6、事件

名称

描述

onTitleModeChange(callback: (titleMode: NavigationTitleMode) => void)

当titleMode为NavigationTitleMode.Free时,随着可滚动组件的滑动标题栏模式发生变化时触发此回调。

onNavBarStateChange(callback: (isVisible: boolean) => void)

导航栏显示状态切换时触发该回调。返回值isVisible为true时表示显示,为false时表示隐藏。

7、示例

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct NavigationPage {
  5.   @State message: string = 'Navigation组件一般作为Page页面的根容器,通过属性设置来展示页面的标题栏、工具栏、导航栏等。'
  6.   private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  7.   @State currentIndex: number = 0
  8.   @State Build: Array<Object> = [
  9.     {
  10.       text: 'add',
  11.       num: 0
  12.     },
  13.     {
  14.       text: 'app',
  15.       num: 1
  16.     },
  17.     {
  18.       text: 'collect',
  19.       num: 2
  20.     }
  21.   ]
  22.   // 页面标题
  23.   @Builder
  24.   NavigationTitle() {
  25.     Column() {
  26.       Text('Title')
  27.         .fontColor('#182431')
  28.         .fontSize(30)
  29.         .lineHeight(41)
  30.         .fontWeight(700)
  31.       Text('subtitle')
  32.         .fontColor('#182431')
  33.         .fontSize(14)
  34.         .lineHeight(19)
  35.         .opacity(0.4)
  36.         .margin({ top: 2, bottom: 20 })
  37.     }
  38.     .alignItems(HorizontalAlign.Start)
  39.   }
  40.   // 页面右上角菜单
  41.   @Builder
  42.   NavigationMenus() {
  43.     Column() {
  44.       Blank(12)
  45.       Row() {
  46.         Image($r("app.media.navigation_icon1"))
  47.           .width(24)
  48.           .height(24)
  49.         Image($r("app.media.navigation_icon1"))
  50.           .width(24)
  51.           .height(24)
  52.           .margin({ left: 24 })
  53.         Image($r("app.media.navigation_icon2"))
  54.           .width(24)
  55.           .height(24)
  56.           .margin({ left: 24 })
  57.       }
  58.     }
  59.   }
  60.   // 设置工具栏内容
  61.   @Builder
  62.   NavigationToolbar() {
  63.     Row() {
  64.       ForEach(this.Build, (item) => {
  65.         Column() {
  66.           Image(this.currentIndex == item.num ? $r("app.media.navigation_toolbar_public_selected") : $r("app.media.navigation_toolbar_public"))
  67.             .width(24)
  68.             .height(24)
  69.           Text(item.text)
  70.             .fontColor(this.currentIndex == item.num ? '#007DFF' : '#182431')
  71.             .fontSize(10)
  72.             .lineHeight(14)
  73.             .fontWeight(500)
  74.             .margin({ top: 3 })
  75.         }.width(104).height(56)
  76.         .onClick(() => {
  77.           this.currentIndex = item.num
  78.         })
  79.       })
  80.     }.margin({ left: 24 })
  81.   }
  82.   build() {
  83.     Column() {
  84.       Navigation() {
  85.         TextInput({ placeholder: 'search...' })
  86.           .width('90%')
  87.           .height(40)
  88.           .backgroundColor('#FFFFFF')
  89.           .margin({ top: 8 })
  90.         List({ space: 12, initialIndex: 0 }) {
  91.           ForEach(this.arr, (item) => {
  92.             ListItem() {
  93.               Text('' + item)
  94.                 .width('90%')
  95.                 .height(72)
  96.                 .backgroundColor('#FFFFFF')
  97.                 .borderRadius(24)
  98.                 .fontSize(16)
  99.                 .fontWeight(500)
  100.                 .textAlign(TextAlign.Center)
  101.             }.editable(true)
  102.           }, item => item)
  103.         }
  104.         .height(324)
  105.         .width('100%')
  106.         .margin({ top: 12, left: '10%' })
  107.         Button("Navigation文本文档")
  108.           .fontSize(20)
  109.           .backgroundColor('#007DFF')
  110.           .width('96%')
  111.           .onClick(() => {
  112.             // 处理点击事件逻辑
  113.             router.pushUrl({
  114.               url: "pages/baseComponent/navigation/NavigationDesc",
  115.             })
  116.           })
  117.           .margin({ top: 20 })
  118.       }
  119.       .title(this.NavigationTitle) // 页面标题
  120.       .menus(this.NavigationMenus) // 页面右上角菜单
  121.       .titleMode(NavigationTitleMode.Full) // 页面标题栏显示模式。
  122.       .toolBar(this.NavigationToolbar) // 设置工具栏内容
  123.       .hideTitleBar(false) // 隐藏标题栏
  124.       .hideToolBar(false) // 隐藏工具栏
  125.       .onTitleModeChange((titleModel: NavigationTitleMode) => { //
  126.         console.info('titleMode' + titleModel)
  127.       })
  128.     }
  129.     .width('100%').height("100%").backgroundColor('#F1F3F5')
  130.   }
  131. }

8、效果图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/296518
推荐阅读
相关标签
  

闽ICP备14008679号