مؤلفه کشوی پیمایش منویی لغزشی است که به کاربران امکان میدهد به بخشهای مختلف برنامه شما پیمایش کنند. کاربران میتوانند آن را با تند کشیدن از کنار یا ضربه زدن روی نماد منو فعال کنند.
این سه مورد استفاده را برای پیادهسازی «کشوی پیمایش» درنظر بگیرید:
- سازماندهی محتوا: به کاربران امکان میدهد بین دستههای مختلف جابهجا شوند، مثلاً در برنامههای خبری یا وبلاگنویسی.
- مدیریت حساب: پیوندهای سریع به تنظیمات حساب و بخشهای نمایه در برنامههای دارای حساب کاربری ارائه دهید.
- کاوش ویژگی: سازماندهی چندین ویژگی و تنظیم در یک منو برای تسهیل کاوش و دسترسی کاربر در برنامههای پیچیده.
در «طراحی مواد»، دو نوع کشوی پیمایش وجود دارد:
- استاندارد: فضای داخل صفحه را با محتوای دیگر همرسانی کنید.
- مدال: روی محتوای دیگر در صفحه ظاهر میشود.
مثال
میتوانید از ترکیبپذیر 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(painter = rememberVectorPainter(AppIcons.Settings), contentDescription = null) }, badge = { Text("20") }, // Placeholder onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Help and feedback") }, selected = false, icon = { Icon(painter = rememberVectorPainter(AppIcons.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(painter = rememberVectorPainter(AppIcons.Menu), contentDescription = "Menu") } } ) } ) { innerPadding -> content(innerPadding) } } }
نکات کلیدی درباره کد
drawerContentرا باColumnحاوی بخشها، جداکنندهها، و موارد پیمایش پر میکند.ModalDrawerSheetسبک Material Design را برای کشو ارائه میدهد.HorizontalDividerبخشها را در کشو ازهم جدا میکند.ModalNavigationDrawerکشو را ایجاد میکند.-
drawerContentمحتوای کشو را تعریف میکند. - درون
ModalDrawerSheet، یکColumnعناصر کشو را بهصورت عمودی مرتب میکند. NavigationDrawerItemcomposables represent individual items in the drawer.-
Scaffoldساختار اصلی صفحه را ارائه میدهد، ازجملهTopAppBar. -
navigationIconدرTopAppBarوضعیت باز و بسته بودن کشو را کنترل میکند.
نتیجه
تصویر زیر نشان میدهد که کشو هنگام باز شدن چگونه ظاهر میشود و بخشها و موارد چگونه نمایش داده میشوند:
منابع بیشتر
- طراحی مواد: کشوی پیمایش