Navigation(頁面的根容器)

2024-01-25 13:20 更新

Navigation組件一般作為頁面的根容器,包括單頁面、分欄和自適應三種顯示模式。同時,Navigation提供了屬性來設置頁面的標題欄、工具欄、導航欄等。

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

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

設置頁面顯示模式

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. }

設置標題欄模式

標題欄在界面頂部,用于呈現(xiàn)界面名稱和操作入口,Navigation組件通過titleMode屬性設置標題欄模式。

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

    強調(diào)型標題欄,用于一級頁面需要突出標題的場景。

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

設置菜單欄

菜單欄位于Navigation組件的右上角,開發(fā)者可以通過menus屬性進行設置。menus支持Array<NavigationMenuItem>和CustomBuilder兩種參數(shù)類型。使用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組件的底部,開發(fā)者可以通過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: ()=>{}}]})
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號