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


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

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

Настраивать

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

Котлин

dependencies {
    def wear_compose_version = "1.5.0"
    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 Navigation, ознакомьтесь с разделом Навигация с помощью Compose или пройдите лабораторную работу по написанию кода Jetpack Compose Navigation .

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