عنصر کشوی پیمایش منو کشویی است که به کاربران امکان میدهد به بخشهای مختلف برنامه شما پیمایش کنند. کاربران میتوانند با کشیدن از کنار یا تکضرب زدن روی نماد منو، آن را فعال کنند.
این سه مورد استفاده را برای پیادهسازی «کشوی پیمایش» درنظر بگیرید:
- سازماندهی محتوا: به کاربران امکان میدهد بین دستههای مختلف جابهجا شوند، مثلاً در برنامههای خبری یا وبلاگنویسی.
- مدیریت حساب: پیوندهای سریعی به تنظیمات حساب و بخشهای نمایه در برنامههای دارای حساب کاربری ارائه میدهد.
- کاوش ویژگی: چندین ویژگی و تنظیم را در یک منو سازماندهی کنید تا کاوش و دسترسی کاربر در برنامههای پیچیده آسانتر شود.
در «طراحی مادی»، دو نوع کشوی پیمایش وجود دارد:
- استاندارد: فضای صفحه را با محتوای دیگر همرسانی کنید.
- مشروط: در بالای محتوای دیگر در صفحه ظاهر میشود.
مثال
میتوانید از عنصر چیدمانی 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،
DrawerState را به ModalNavigationDrawer ارسال کنید.
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 } }
ایجاد گروهها در کشوی پیمایش
تکهکد زیر نحوه ایجاد کشوی پیمایش دقیق با بخشها و جداکنندهها را نشان میدهد:
@Composable fun DetailedDrawerExample( content: @Composable (PaddingValues) -> Unit ) { val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Column( modifier = Modifier.padding(horizontal = 16.dp) .verticalScroll(rememberScrollState()) ) { Spacer(Modifier.height(12.dp)) Text("Drawer Title", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleLarge) HorizontalDivider() Text("Section 1", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) NavigationDrawerItem( label = { Text("Item 1") }, selected = false, onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Item 2") }, selected = false, onClick = { /* Handle click */ } ) HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) Text("Section 2", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) NavigationDrawerItem( label = { Text("Settings") }, selected = false, icon = { Icon(Icons.Outlined.Settings, contentDescription = null) }, badge = { Text("20") }, // Placeholder onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Help and feedback") }, selected = false, icon = { Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) }, onClick = { /* Handle click */ }, ) Spacer(Modifier.height(12.dp)) } } }, drawerState = drawerState ) { Scaffold( topBar = { TopAppBar( title = { Text("Navigation Drawer Example") }, navigationIcon = { IconButton(onClick = { scope.launch { if (drawerState.isClosed) { drawerState.open() } else { drawerState.close() } } }) { Icon(Icons.Default.Menu, contentDescription = "Menu") } } ) } ) { innerPadding -> content(innerPadding) } } }
نکات کلیدی درباره کد
drawerContentرا باColumnحاوی بخشها، جداکنندهها، و عناصر پیمایش پر میکند.ModalDrawerSheetسبک «طراحی مواد» را برای کشو ارائه میدهد.HorizontalDividerبخشهای داخل کشو را جدا میکند.ModalNavigationDrawerکشو را ایجاد میکند.-
drawerContentمحتوای کشو را تعریف میکند. - در
ModalDrawerSheet،Columnعناصر کشو را بهصورت عمودی مرتب میکند. - عناصر ترکیبی
NavigationDrawerItemنشاندهنده موارد تکی در کشویی هستند. Scaffoldساختار اصلی صفحه را ارائه میدهد، ازجملهTopAppBar.navigationIconدرTopAppBarوضعیت باز و بسته بودن کشو را کنترل میکند.
نتیجه
تصویر زیر نحوه نمایش کشو را هنگام باز شدن، با بخشها و موارد نمایشدادهشده نشان میدهد:
منابع بیشتر
- طراحی سهبعدی: کشوی پیمایش