当前位置:   article > 正文

【HarmonyOS】初识ArkUI——快速实现页面导航之Navigation_鸿蒙 navigation

鸿蒙 navigation

【关键字】

HarmonyOS、ArkUI、Navigation、自定义导航栏、底部导航

1、写在前面

今天继续来介绍如何通过ArkUI来实现应用中常见的导航效果——底部导航,上一篇中介绍了Tabs的实现方式,今天来介绍另一种组件Navigation,参考文档:文档中心

2、开发实战

关于基本概念就不再多做介绍了,有需要的直接点击上面的链接进行了解即可,我们直接进入正题。

首先,新建一个变量,用来表示当前页的索引:

cke_466.png

然后同样的我们借助Builder装饰器的方式来自定义菜单栏和工具栏,首先来实现菜单栏:

这里我们通过一个横向的线性布局内部包裹3个Image组件,来展示页面顶部右上角的菜单按钮:

cke_1133.png

接着我们以类似的方式来实现底部的3个导航按钮,这里使用横向的线性布局Row来包裹3个导航按钮,每个导航按钮通过纵向的线性布局Column来实现,Column内部按照上图下文的形式排列,如下所示:

cke_2044.png

最后在Navigation组件的相关属性中将上面自定义的Builder设置进去即可,这里我们设置了标题、页面显示模式、标题栏模式、菜单栏、工具栏,并且隐藏页面的返回按钮:cke_3144.png

核心内容到这里就已经介绍完了,下面附上完整的代码,便于大家查看和理解:

  1. @Entry
  2. @Component
  3. struct NavPage {
  4. @State index: number = 0
  5. @Builder NavigationMenus() { // CustomBuilder类型的菜单栏
  6. Row() {
  7. Image($r('app.media.icon_search'))
  8. .size({ width: 24, height: 24 })
  9. Image($r('app.media.icon_add'))
  10. .size({ width: 24, height: 24 })
  11. .margin({ left: 5 })
  12. Image($r('app.media.icon_more'))
  13. .size({ width: 24, height: 24 })
  14. .margin({ left: 5 })
  15. }.justifyContent(FlexAlign.End)
  16. }
  17. @Builder NavigationToolbar() { // CustomBuilder类型的toolbar
  18. Row() {
  19. Column() {
  20. Image(this.index == 0 ? $r('app.media.icon_indexed') : $r('app.media.icon_index'))
  21. .size({ width: 25, height: 25 })
  22. Text('首页')
  23. .fontSize(16)
  24. .fontColor(this.index == 0 ? "#28bff1" : "#8a8a8a")
  25. }
  26. .alignItems(HorizontalAlign.Center)
  27. .height('100%')
  28. .layoutWeight(1)
  29. .onClick(() => {
  30. this.index = 0;
  31. })
  32. Column() {
  33. Image(this.index == 1 ? $r('app.media.icon_listed') : $r('app.media.icon_list'))
  34. .size({ width: 25, height: 25 })
  35. Text('列表')
  36. .fontSize(16)
  37. .fontColor(this.index == 1 ? "#28bff1" : "#8a8a8a")
  38. }
  39. .alignItems(HorizontalAlign.Center)
  40. .height('100%')
  41. .layoutWeight(1)
  42. .onClick(() => {
  43. this.index = 1;
  44. })
  45. Column() {
  46. Image(this.index == 2 ? $r('app.media.icon_othered') : $r('app.media.icon_other'))
  47. .size({ width: 25, height: 25 })
  48. Text('更多')
  49. .fontSize(16)
  50. .fontColor(this.index == 2 ? "#28bff1" : "#8a8a8a")
  51. }
  52. .alignItems(HorizontalAlign.Center)
  53. .height('100%')
  54. .layoutWeight(1)
  55. .onClick(() => {
  56. this.index = 2;
  57. })
  58. }
  59. .width('100%')
  60. .height(50)
  61. .alignItems(VerticalAlign.Center)
  62. }
  63. build() {
  64. Column() {
  65. Navigation(){
  66. Text(this.index == 0 ? "首页" : this.index == 1 ? "列表" : "更多")
  67. .textAlign(TextAlign.Center)
  68. .fontSize(30)
  69. .size({ width: '100%', height: '100%' })
  70. .backgroundColor('#ffd4e9ee')
  71. }
  72. .title("ArkUI")
  73. .mode(NavigationMode.Stack)
  74. .titleMode(NavigationTitleMode.Mini)
  75. .hideBackButton(true)
  76. .menus(this.NavigationMenus())
  77. .toolBar(this.NavigationToolbar())
  78. .size({ width: '100%', height: '100%' })
  79. }
  80. .width('100%')
  81. .height('100%')
  82. }
  83. }

3、实现效果

通过上面的代码就可以利用Navigation来实现底部导航啦,最后来一起看一下咱们的实现效果吧:

2.gif

OK,本期内容就到这里啦,下期再会!

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

闽ICP备14008679号