Navigation(頁(yè)面的根容器)

2024-01-25 13:20 更新

Navigation組件一般作為頁(yè)面的根容器,包括單頁(yè)面、分欄和自適應(yīng)三種顯示模式。同時(shí),Navigation提供了屬性來(lái)設(shè)置頁(yè)面的標(biāo)題欄、工具欄、導(dǎo)航欄等。

Navigation組件的頁(yè)面包含主頁(yè)和內(nèi)容頁(yè)。主頁(yè)由標(biāo)題欄、內(nèi)容區(qū)和工具欄組成,可在內(nèi)容區(qū)中使用NavRouter子組件實(shí)現(xiàn)導(dǎo)航欄功能。內(nèi)容頁(yè)主要顯示NavDestination子組件中的內(nèi)容。

NavRouter是配合Navigation使用的特殊子組件,默認(rèn)提供點(diǎn)擊響應(yīng)處理,不需要開(kāi)發(fā)者自定義點(diǎn)擊事件邏輯。NavRouter有且僅有兩個(gè)子組件,其中第二個(gè)子組件必須是NavDestination。NavDestination是配合NavRouter使用的特殊子組件,用于顯示Navigation組件的內(nèi)容頁(yè)。當(dāng)開(kāi)發(fā)者點(diǎn)擊NavRouter組件時(shí),會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的NavDestination內(nèi)容區(qū)。

設(shè)置頁(yè)面顯示模式

Navigation組件通過(guò)mode屬性設(shè)置頁(yè)面的顯示模式。

  • 自適應(yīng)模式

    Navigation組件默認(rèn)為自適應(yīng)模式,此時(shí)mode屬性為NavigationMode.Auto。自適應(yīng)模式下,當(dāng)設(shè)備寬度大于520vp時(shí),Navigation組件采用分欄模式,反之采用單頁(yè)面模式。

    1. Navigation() {
    2. ...
    3. }
    4. .mode(NavigationMode.Auto)
  • 單頁(yè)面模式
    圖1 單頁(yè)面布局示意圖

    將mode屬性設(shè)置為NavigationMode.Stack,Navigation組件即可設(shè)置為單頁(yè)面顯示模式。

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

  • 分欄模式
    圖2 分欄布局示意圖

    將mode屬性設(shè)置為NavigationMode.Split,Navigation組件即可設(shè)置為分欄顯示模式。

    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("主標(biāo)題")
    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. }

設(shè)置標(biāo)題欄模式

標(biāo)題欄在界面頂部,用于呈現(xiàn)界面名稱(chēng)和操作入口,Navigation組件通過(guò)titleMode屬性設(shè)置標(biāo)題欄模式。

  • Mini模式
    普通型標(biāo)題欄,用于一級(jí)頁(yè)面不需要突出標(biāo)題的場(chǎng)景。
    圖3 Mini模式標(biāo)題欄
    1. Navigation() {
    2. ...
    3. }
    4. .titleMode(NavigationTitleMode.Mini)
  • Full模式

    強(qiáng)調(diào)型標(biāo)題欄,用于一級(jí)頁(yè)面需要突出標(biāo)題的場(chǎng)景。

    圖4 Full模式標(biāo)題欄
    1. Navigation() {
    2. ...
    3. }
    4. .titleMode(NavigationTitleMode.Full)

設(shè)置菜單欄

菜單欄位于Navigation組件的右上角,開(kāi)發(fā)者可以通過(guò)menus屬性進(jìn)行設(shè)置。menus支持Array<NavigationMenuItem>和CustomBuilder兩種參數(shù)類(lèi)型。使用Array<NavigationMenuItem>類(lèi)型時(shí),豎屏最多支持顯示3個(gè)圖標(biāo),橫屏最多支持顯示5個(gè)圖標(biāo),多余的圖標(biāo)會(huì)被放入自動(dòng)生成的更多圖標(biāo)。

圖5 設(shè)置了3個(gè)圖標(biāo)的菜單欄
  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 設(shè)置了4個(gè)圖標(biāo)的菜單欄
  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: ()=>{}}])

設(shè)置工具欄

工具欄位于Navigation組件的底部,開(kāi)發(fā)者可以通過(guò)toolBar屬性進(jìn)行設(shè)置。

圖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: ()=>{}}]})
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)