عنصر درج التنقل هو قائمة انزلاق تتيح للمستخدمين التنقّل إلى أقسام مختلفة من تطبيقك. ويمكن للمستخدمين تفعيله من خلال التمرير سريعًا من الجانب أو النقر على رمز القائمة.
راجِع حالات الاستخدام الثلاث التالية لتنفيذ "لوحة التنقّل":
- تنظيم المحتوى: يمكنك السماح للمستخدمين بالتبديل بين فئات مختلفة، مثل التطبيقات الإخبارية أو تطبيقات التدوين.
- إدارة الحساب: يجب توفير روابط سريعة إلى إعدادات الحساب وأقسام الملف الشخصي في التطبيقات التي تتضمّن حسابات مستخدمين.
- اكتشاف الميزات: يمكنك تنظيم ميزات وإعدادات متعددة في قائمة واحدة لتسهيل اكتشاف المستخدمين والوصول إليه في التطبيقات المعقّدة.
في أسلوب 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 } }