📅  最后修改于: 2023-12-03 14:59:16.580000             🧑  作者: Mango
Android 架构组件中的导航(Navigation)是一种用于管理应用程序组件之间导航关系的框架。它包含许多有用的工具,可实现更简单的应用程序导航和开发。本篇文章将为程序员进行介绍。
导航图是定义应用程序中所有目标目的地和路径之间关系的 XML 资源。导航图包含一个或多个目的地和路径,其中每个目的地代表应用程序中的一个“屏幕”,而每个路径代表一种“操作”,例如:导航到另一个目标。
以下代码演示了如何创建一个简单的导航图:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.navigationdemo.HomeFragment"
android:label="@string/home_fragment_label"
tools:layout="@layout/fragment_home">
<action
android:id="@+id/action_to_detail"
app:destination="@id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.navigationdemo.DetailFragment"
android:label="@string/detail_fragment_label"
tools:layout="@layout/fragment_detail" />
</navigation>
上述代码中,首先定义了一个 Navigation 根元素,其中包含两个 Fragment(homeFragment 和 detailFragment),以及一个 action 元素,用于表示从 homeFragment 到 detailFragment 的导航路径。
NavController 是处理与导航图关联的类。在拥有导航图后,可使用 NavController 中的一些 API 完成以下操作:
以下代码演示了如何使用 NavController 导航到目标屏幕:
val navController = findNavController(R.id.nav_host_fragment)
navController.navigate(R.id.action_to_detail)
上述代码中,通过 findNavController 获取到 NavController 实例,然后使用 navigate 导航到 action_to_detail 所代表的目标屏幕。
将 下载器 Fragment(DownloaderFragment)作为应用程序根部目录具有以下优点:
以下代码演示了如何使用应用程序根部目录:
<fragment
android:id="@+id/downloaderFragment"
android:name="com.example.navigationdemo.DownloaderFragment"
android:label="@string/app_name"
tools:layout="@layout/fragment_downloader">
<action
android:id="@+id/action_downloader_to_home"
app:destination="@id/homeFragment"
app:popUpTo="@id/downloaderFragment"
app:popUpToInclusive="true" />
</fragment>
上述代码中,DownloaderFragment 作为应用程序的根部目录,此时在导航之前,应用程序的根部目录是 DownloaderFragment。同时,定义了一个 action 元素,用于导航到 homeFragment,并设置了 popUpTo 和 popUpToInclusive 属性,这些属性用于指定 “向上” 导航时需要从任务栈中清除哪些目标。
导航框架提供了一些默认的转场动画,例如:从一个 Fragment 到另一个 Fragment;从一个 Activity 到另一个 Activity 等。若要为导航添加自定义动画,请在 res 目录中创建一个新的 anim 目录,并添加自定义的动画资源文件,然后在 Navigation Xml 文件中为路径定义动画即可。
以下代码演示了如何在导航时添加自定义动画:
<action
android:id="@+id/action_home_to_detail"
app:destination="@+id/detailFragment”
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"/>
上述代码中,定义一个 action 元素,该元素导航到 detailFragment 并为进入和退出自定义的动画资源文件。此时在导航时,将使用从右侧滑入的方式打开 detailFragment。
本篇文章介绍了 Android 架构组件中的导航,包括导航图、NavController、应用程序根部目录、动画等。使用导航框架,可轻松实现应用程序导航和开发。