Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
120 of 502 menu
◀ ▶

Функция DismissibleNavigationDrawer

Функция DismissibleNavigationDrawer рисует меню и content рядом, как PermanentNavigationDrawer, но панель можно спрятать. Состояние хранят в drawerState, меню - в drawerContent, экран - в content. Открытие и закрытие делают методами open и close.

Синтаксис

DismissibleNavigationDrawer( drawerState = drawerState, drawerContent = { }, ) { content() }

Параметры

Параметр Описание
drawerState Состояние панели типа DrawerState.
drawerContent Лямбда с боковым меню.
gesturesEnabled Разрешает открывать и закрывать панель смахиванием.
content Лямбда с экраном, который сдвигается вместе с drawer.

Пример

Давайте откроем панель кнопкой на верхней панели:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.DismissibleNavigationDrawer import androidx.compose.material3.DrawerValue import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.NavigationDrawerItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.rememberDrawerState import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val drawerState = rememberDrawerState(DrawerValue.Closed) val scope = rememberCoroutineScope() DismissibleNavigationDrawer( drawerState = drawerState, drawerContent = { NavigationDrawerItem( label = { Text("abcde") }, selected = true, onClick = { }, icon = { Icon( imageVector = Icons.Filled.Home, contentDescription = "abcde", ) }, ) }, ) { Scaffold( topBar = { TopAppBar( title = { Text("12345") }, navigationIcon = { IconButton( onClick = { scope.launch { drawerState.open() } }, ) { Icon( imageVector = Icons.Filled.Menu, contentDescription = "12345", ) } }, ) }, ) { padding -> Text( text = "12345", modifier = Modifier.padding(padding), ) } } } } }

На экране content сдвинется вправо, когда панель откроется по кнопке меню.

Пример

Давайте закроем панель после выбора пункта:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home import androidx.compose.material3.DismissibleNavigationDrawer import androidx.compose.material3.DrawerValue import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.NavigationDrawerItem import androidx.compose.material3.Text import androidx.compose.material3.rememberDrawerState import androidx.compose.runtime.rememberCoroutineScope import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val drawerState = rememberDrawerState(DrawerValue.Open) val scope = rememberCoroutineScope() DismissibleNavigationDrawer( drawerState = drawerState, drawerContent = { NavigationDrawerItem( label = { Text("abcde") }, selected = true, onClick = { scope.launch { drawerState.close() } }, icon = { Icon( imageVector = Icons.Filled.Home, contentDescription = "abcde", ) }, ) }, ) { Text(text = "12345") } } } }

На экране после нажатия на пункт меню панель уедет, а content займёт всю ширину.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить