Навигация с помощью Compose for Wear OS


Компонент Navigation в Android Jetpack обеспечивает поддержку приложений Jetpack Compose. Вы можете перемещаться между составными приложениями, используя преимущества инфраструктуры и возможностей компонента Navigation.

На этой странице описаны различия в работе Jetpack Navigation в Compose для Wear OS.

Настраивать

Добавьте следующую зависимость в файл build.gradle вашего модуля приложения:

Котлин

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

Этот код используется вместо артефакта androidx.navigation:navigation-compose поскольку он предоставляет альтернативные реализации, специфичные для Wear OS.

Создайте контроллер навигации, хост и граф.

Для навигации с помощью Compose для Wear OS требуются те же три компонента, что и в приложениях, не предназначенных для Wear OS: контроллер навигации, хост и граф.

Используйте rememberSwipeDismissableNavController() для создания экземпляра WearNavigator , реализации NavController , подходящей для приложений Wear OS:

val navController = rememberSwipeDismissableNavController()

NavController — это основной API, используемый для навигации в приложениях Compose. Он управляет навигацией между компонентами в хосте навигации, которым в Wear OS является SwipeDismissableNavHost .

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

Подобно компоненту NavHost , он принимает ссылку на контроллер навигации, маршрут начального пункта назначения и построитель графа навигации, который здесь показан в виде завершающей лямбда-функции.

В конструкторе навигационного графа необходимо указать начальный пункт назначения, а также все остальные пункты назначения, которые должны быть доступны для навигации с помощью навигационного контроллера.

В вашем приложении для Wear OS объявите SwipeDismissableNavHost как содержимое AppScaffold для поддержки компонентов верхнего уровня, таких как время, индикатор прокрутки или положения, а также индикатор страницы. Используйте объект AppScaffold выше SwipeDismissableNavHost и 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")!!)
            }
        }
    }
}

// Implementation of one of the screens in the navigation
@Composable
fun MessageDetail(id: String) {
    // .. Screen level content goes here
    val scrollState = rememberTransformingLazyColumnState()

    val padding = rememberResponsiveColumnPadding(
        first = ColumnItemType.BodyText
    )

    ScreenScaffold(
        scrollState = scrollState,
        contentPadding = padding
    ) { scaffoldPaddingValues ->
        // Screen content goes here
        // ...

Чтобы узнать больше о навигации в Jetpack, см. раздел «Навигация с помощью Compose» или пройдите практическое занятие по программированию для навигации в Jetpack Compose .

{% verbatim %} {% endverbatim %} {% verbatim %} {% endverbatim %}