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


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

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

Настраивать

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

Котлин

dependencies {
    def wear_compose_version = "1.4.1"
    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
    ) {
        // Screen content goes here

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

{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}