Навигационный ящик

Компонент панели навигации — это выдвижное меню, которое позволяет пользователям переходить к различным разделам вашего приложения. Пользователи могут активировать его, проведя пальцем сбоку или коснувшись значка меню.

Рассмотрим эти три варианта использования для реализации навигационного ящика:

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

В Material Design существует два типа навигационных ящиков:

  • Стандартный: разделяет пространство на экране с другим содержимым.
  • Модальное: появляется поверх другого контента на экране.

Пример

Вы можете использовать составной элемент ModalNavigationDrawer для реализации навигационного ящика.

Используйте слот drawerContent , чтобы предоставить ModalDrawerSheet и предоставить содержимое ящика, как в следующем примере:

ModalNavigationDrawer(
    drawerContent = {
        ModalDrawerSheet {
            Text("Drawer title", modifier = Modifier.padding(16.dp))
            HorizontalDivider()
            NavigationDrawerItem(
                label = { Text(text = "Drawer Item") },
                selected = false,
                onClick = { /*TODO*/ }
            )
            // ...other drawer items
        }
    }
) {
    // Screen content
}

ModalNavigationDrawer принимает ряд дополнительных параметров ящика. Например, вы можете переключить, будет ли ящик реагировать на перетаскивание с помощью gesturesEnabled , как показано в следующем примере:

ModalNavigationDrawer(
    drawerContent = {
        ModalDrawerSheet {
            // Drawer contents
        }
    },
    gesturesEnabled = false
) {
    // Screen content
}

Контроль поведения

Чтобы контролировать, как ящик открывается и закрывается, используйте DrawerState . Вы должны передать DrawerState в ModalNavigationDrawer используя параметр drawerState .

DrawerState предоставляет доступ к функциям open и close , а также свойствам, связанным с текущим состоянием ящика. Для этих приостанавливающих функций требуется CoroutineScope , экземпляр которого можно создать с помощью rememberCoroutineScope . Вы также можете вызывать функции приостановки в ответ на события пользовательского интерфейса.

val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope()
ModalNavigationDrawer(
    drawerState = drawerState,
    drawerContent = {
        ModalDrawerSheet { /* Drawer content */ }
    },
) {
    Scaffold(
        floatingActionButton = {
            ExtendedFloatingActionButton(
                text = { Text("Show drawer") },
                icon = { Icon(Icons.Filled.Add, contentDescription = "") },
                onClick = {
                    scope.launch {
                        drawerState.apply {
                            if (isClosed) open() else close()
                        }
                    }
                }
            )
        }
    ) { contentPadding ->
        // Screen content
    }
}