目录
1. Navigation概述
Navigation是指支持用户导航、进入和退出应用中不同内容片段的交互。用于处理 Fragment事务,使fragment之间可以自由切换和跳转,同时还包括导航界面模式(例如抽屉式导航栏和底部导航),可以降低用户工作量
2. Navigation组成
- 导航图:在一个集中位置包含所有导航相关信息的 XML 资源。包含用户可以跳转的所有路径,对Navigation来说就像是地图。
- NavHost:用来显示导航图中目标所要展示的内容。
- NavController:在 NavHost 中管理应用导航的对象。负责NavHost里内容的改变
如果要在应用中导航,则通过NavController,沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。NavController 就可以在NavHost里进行跳转。
3. 设置环境
在Module的build.gradle下添加如下依赖,再进行同步,完成环境设置
dependencies {
// 指定Navigation的版本
def nav_version = "2.5.3"
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
// Feature module Support
implementation "androidx. navigation:navigation-dynamic-features-fragment:$nav_version"
// Testing Navigation
androidTestImplementation "androidx. navigation:navigation-testing:$nav_version"
// Jetpack Compose Integration
implementation "androidx.navigation:navigation-compose:$nav_version"
}
4. 使用方法
4.1. 创建导航图
导航图是一种资源文件,其中包含Navigation所有目的地和操作。会显示应用的所有导航路径。
4.1.1. 具体操作
- 在“Project”窗口中,点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示 New Resource File 对话框。
- 在 File name 字段中输入Navigation的名称,例如“graph”。
- 从 Resource type 下拉列表中选择 Navigation,然后点击 OK。
这样就完成了空白导航图的创建,这时来到res文档下就会看到navigation文件夹还有你创建的导航图
4.2. 向Activity添加NavHost
分成两种方法:
- 通过 XML 添加
- 使用布局编辑器添加
4.2.1. 通过 XML 添加
在activity中加入如下代码
<!-- 这里navGraph的值要改为自己导航图的名字 -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="409dp"
android:layout_height="729dp"
app:defaultNavHost="true"
app:navGraph="@navigation/graph"
tools:layout_editor_absoluteX="1dp"
tools:layout_