使用 Compose 导航 Wear OS

Android Jetpack 中的导航组件为 Jetpack Compose 应用提供支持。您可以利用导航组件的基础结构和功能在可组合项之间导航。

此页面描述了 Wear OS 上的 Compose 导航与 Jetpack 导航的区别。

设置

在应用模块的 build.gradle 文件中使用以下依赖项

Kotlin

dependencies {
    def wear_compose_version = "1.4.0"
    implementation "androidx.wear.compose:compose-navigation:$wear_compose_version"
}

替代androidx.navigation:navigation-compose工件,因为它提供了特定于 Wear OS 的替代实现。

创建导航控制器、宿主和图

使用 Compose 导航 Wear OS 需要与非 Wear OS 应用相同的三个组件:导航控制器、宿主和图。

使用 rememberSwipeDismissableNavController() 创建 WearNavigator 的实例,这是一个适用于 Wear OS 应用程序的 NavController 实现。

Kotlin

val navController = rememberSwipeDismissableNavController()

NavController 是 Compose 应用程序中用于导航的主要 API。它控制导航宿主中可组合项之间的导航,在 Wear OS 上,导航宿主是 SwipeDismissableNavHost

Kotlin

val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(
    navController = navController,
    startDestination = "message_list"
) {
    // TODO: build navigation graph
}

NavHost 可组合项 一样,它接收导航控制器的引用、起始目的地的路由以及导航图的构建器(此处显示为尾随 lambda)。

起始目的地必须在导航图构建器中提供,以及所有其他应该使用导航控制器可导航的目的地。

在您的 Wear OS 应用程序中,将 SwipeDismissableNavHost 声明为 Scaffold 的内容,以支持顶级组件,如时间、滚动/位置指示器和页面指示器。在 SwipeDismissableNavHost 上方使用 Horologist AppScaffold 对象,并在屏幕级别使用 Horologist ScreenScaffold,以默认情况下将 TimeText 对象添加到屏幕,并确保在屏幕之间导航时其动画正确。此外,ScreenScaffold 为可滚动内容添加了 PositionIndicator

AppScaffold {
    val navController = rememberSwipeDismissableNavController()
    SwipeDismissableNavHost(
        navController = navController,
        startDestination = "message_list"
    ) {
        composable("message_list") {
            MessageList(onMessageClick = { id ->
                navController.navigate("message_detail/$id")
            })
        }
        composable("message_detail/{id}") {
            MessageDetail(id = it.arguments?.getString("id")!!)
        }
    }
}
// ...
// .. Screen level content goes here
val scrollState = rememberScrollState()

ScreenScaffold(scrollState = scrollState) {
    // Screen content goes here

要了解有关 Jetpack Navigation 的更多信息,请参阅 使用 Compose 进行导航 或参加 Jetpack Compose Navigation 代码实验室