導航

導覽是指允許使用者在應用程式的不同內容片段中,自由進行瀏覽、進入及退出的互動方式。

Android Jetpack 的 Navigation 元件包含 Navigation 程式庫Safe Args Gradle 外掛程式,以及協助您實作應用程式導覽的工具。導覽元件處理多種導覽用途,包括簡單的按鈕點擊,或較為複雜的應用程式列與導覽匣等模式。

核心概念

下表概略說明導覽中的重要概念,以及用於實作這些概念的主要類型。

概念

目的

類型

主機

包含目前導覽目的地的 UI 元素。也就是說,當使用者瀏覽應用程式時,應用程式基本上會來回切換導覽主機的目的地。

圖表

定義應用程式中所有導覽目的地及其連結方式的資料結構。

NavGraph

遙控器

用於管理目的地之間的導覽的中央協調人員。控制器提供在目的地之間瀏覽的方法、處理深層連結、管理返回堆疊等。

NavController

到達網頁

導覽圖中的節點。使用者前往這個節點時,主機會顯示其內容。

NavDestination

通常在建構導覽圖時建立。

路線

用於識別目的地及其所需的任何資料。

您可以使用路徑進行導航。「路線」會帶你前往目的地。

任何可序列化的資料類型。

優點與功能

Navigation 元件提供許多其他優點和功能,包括:

  • 動畫和轉場效果:提供動畫和轉場效果的標準化資源。
  • 深層連結:實作並處理可將使用者直接導向目的地的深層連結。
  • UI 模式:只需極少的額外工作,就能支援導覽匣和底部導覽等模式。
  • 類型安全:包含透過類型安全在目的地之間傳遞資料的支援。
  • ViewModel 支援:允許將 ViewModel 的範圍限定為導覽圖,以便在圖表的目的地之間共用 UI 相關資料。
  • 片段交易:完整支援及處理片段交易。
  • 備份和備份:根據預設,正確處理備份和備份動作。

設定環境

如要在專案中加入導覽支援功能,請將下列依附元件新增至應用程式的 build.gradle 檔案:

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.8.4"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.8.4"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

如要瞭解如何將其他架構元件新增至專案,請參閱「在專案中新增元件」。

後續步驟

如需更多有關 Navigation 元件的說明文件和資源,請參閱下列資源。

詳細指南

如要進一步瞭解如何實作導覽主機和 NavController,以及這兩者與 Compose 和其他 UI 架構互動的方式,請參閱下列指南:

程式碼研究室

影片

範例