codecamp

Navigation(页面的根容器)

Navigation组件一般作为页面的根容器,包括单页面、分栏和自适应三种显示模式。同时,Navigation提供了属性来设置页面的标题栏、工具栏、导航栏等。

Navigation组件的页面包含主页和内容页。主页由标题栏、内容区和工具栏组成,可在内容区中使用NavRouter子组件实现导航栏功能。内容页主要显示NavDestination子组件中的内容。

NavRouter是配合Navigation使用的特殊子组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。NavRouter有且仅有两个子组件,其中第二个子组件必须是NavDestination。NavDestination是配合NavRouter使用的特殊子组件,用于显示Navigation组件的内容页。当开发者点击NavRouter组件时,会跳转到对应的NavDestination内容区。

设置页面显示模式

Navigation组件通过mode属性设置页面的显示模式。

  • 自适应模式

    Navigation组件默认为自适应模式,此时mode属性为NavigationMode.Auto。自适应模式下,当设备宽度大于520vp时,Navigation组件采用分栏模式,反之采用单页面模式。

    1. Navigation() {
    2. ...
    3. }
    4. .mode(NavigationMode.Auto)
  • 单页面模式
    图1 单页面布局示意图

    将mode属性设置为NavigationMode.Stack,Navigation组件即可设置为单页面显示模式。

    1. Navigation() {
    2. ...
    3. }
    4. .mode(NavigationMode.Stack)

  • 分栏模式
    图2 分栏布局示意图

    将mode属性设置为NavigationMode.Split,Navigation组件即可设置为分栏显示模式。

    1. @Entry
    2. @Component
    3. struct NavigationExample {
    4. private arr: number[] = [1, 2, 3];
    5. build() {
    6. Column() {
    7. Navigation() {
    8. TextInput({ placeholder: 'search...' })
    9. .width("90%")
    10. .height(40)
    11. .backgroundColor('#FFFFFF')
    12. List({ space: 12 }) {
    13. ForEach(this.arr, (item) => {
    14. ListItem() {
    15. NavRouter() {
    16. Text("NavRouter" + item)
    17. .width("100%")
    18. .height(72)
    19. .backgroundColor('#FFFFFF')
    20. .borderRadius(24)
    21. .fontSize(16)
    22. .fontWeight(500)
    23. .textAlign(TextAlign.Center)
    24. NavDestination() {
    25. Text("NavDestinationContent" + item)
    26. }
    27. .title("NavDestinationTitle" + item)
    28. }
    29. }
    30. }, item => item)
    31. }
    32. .width("90%")
    33. .margin({ top: 12 })
    34. }
    35. .title("主标题")
    36. .mode(NavigationMode.Split)
    37. .menus([
    38. {value: "", icon: "./image/ic_public_search.svg", action: ()=> {}},
    39. {value: "", icon: "./image/ic_public_add.svg", action: ()=> {}},
    40. {value: "", icon: "./image/ic_public_add.svg", action: ()=> {}},
    41. {value: "", icon: "./image/ic_public_add.svg", action: ()=> {}},
    42. {value: "", icon: "./image/ic_public_add.svg", action: ()=> {}}
    43. ])
    44. .toolBar({items: [
    45. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=> {}},
    46. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=> {}},
    47. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=> {}}
    48. ]})
    49. }
    50. .height('100%')
    51. .width('100%')
    52. .backgroundColor('#F1F3F5')
    53. }
    54. }

设置标题栏模式

标题栏在界面顶部,用于呈现界面名称和操作入口,Navigation组件通过titleMode属性设置标题栏模式。

  • Mini模式
    普通型标题栏,用于一级页面不需要突出标题的场景。
    图3 Mini模式标题栏
    1. Navigation() {
    2. ...
    3. }
    4. .titleMode(NavigationTitleMode.Mini)
  • Full模式

    强调型标题栏,用于一级页面需要突出标题的场景。

    图4 Full模式标题栏
    1. Navigation() {
    2. ...
    3. }
    4. .titleMode(NavigationTitleMode.Full)

设置菜单栏

菜单栏位于Navigation组件的右上角,开发者可以通过menus属性进行设置。menus支持Array<NavigationMenuItem>和CustomBuilder两种参数类型。使用Array<NavigationMenuItem>类型时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。

图5 设置了3个图标的菜单栏
  1. Navigation() {
  2. ...
  3. }
  4. .menus([{value: "", icon: "./image/ic_public_search.svg", action: ()=>{}},
  5. {value: "", icon: "./image/ic_public_add.svg", action: ()=>{}},
  6. {value: "", icon: "./image/ic_public_add.svg", action: ()=>{}}])
图6 设置了4个图标的菜单栏
  1. Navigation() {
  2. ...
  3. }
  4. .menus([{value: "", icon: "./image/ic_public_search.svg", action: ()=>{}},
  5. {value: "", icon: "./image/ic_public_add.svg", action: ()=>{}},
  6. {value: "", icon: "./image/ic_public_add.svg", action: ()=>{}},
  7. {value: "", icon: "./image/ic_public_add.svg", action: ()=>{}}])

设置工具栏

工具栏位于Navigation组件的底部,开发者可以通过toolBar属性进行设置。

图7 工具栏
  1. Navigation() {
  2. ...
  3. }
  4. .toolBar({items:[
  5. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}},
  6. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}},
  7. {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}}]})
页面路由(router)
Tabs(页面导航)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
HAR

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }