شريط التنقل

يتيح شريط التنقّل للمستخدمين التبديل بين وجهات في أحد التطبيقات. ويجب استخدام أشرطة التنقّل في الحالات التالية:

  • ثلاث إلى خمس وجهات متساوية الأهمية
  • أحجام النوافذ المضغوطة
  • وجهات متسقة في جميع شاشات التطبيق
شريط تنقّل يتضمّن 4 وجهات تحتوي كل وجهة على اسم عنصر نائب يُطلق عليه "التصنيف"، وتظهر الوجهة المحدّدة برمز دائرة، وبقية الوجهات على شكل مثلثات.
الشكل 1. شريط تنقّل يتضمّن 4 وجهات

توضّح لك هذه الصفحة كيفية عرض شريط تنقّل في تطبيقك يتضمّن شاشات ذات صلة وعناصر تنقّل أساسية.

مساحة واجهة برمجة التطبيقات

استخدِم العنصرَين القابلَين للإنشاء NavigationBar وNavigationBarItem لتنفيذ منطق تبديل الوجهات. يمثّل كل NavigationBarItem وجهة واحدة.

تتضمّن NavigationBarItem المَعلمات الرئيسية التالية:

  • selected: تحدّد هذه السمة ما إذا كان العنصر الحالي مميّزًا بصريًا.
  • onClick(): يحدّد الإجراء الذي سيتم تنفيذه عندما ينقر المستخدم على العنصر. يجب أن يتضمّن هذا القسم منطقًا للتعامل مع أحداث التنقّل أو تعديل حالة العنصر المحدّد أو تحميل المحتوى ذي الصلة.
  • label: تعرض نصًا داخل العنصر. اختيارية:
  • icon: تعرض هذه السمة رمزًا داخل السلعة. اختيارية:

مثال: شريط التنقّل السفلي

يعرض مقتطف الرمز التالي شريط تنقّل سفليًا يتضمّن عناصر تتيح للمستخدمين التنقّل بين الشاشات المختلفة في التطبيق:

@Composable
fun NavigationBarExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(
        modifier = modifier,
        bottomBar = {
            NavigationBar(windowInsets = NavigationBarDefaults.windowInsets) {
                Destination.entries.forEachIndexed { index, destination ->
                    NavigationBarItem(
                        selected = selectedDestination == index,
                        onClick = {
                            navController.navigate(route = destination.route)
                            selectedDestination = index
                        },
                        icon = {
                            Icon(
                                destination.icon,
                                contentDescription = destination.contentDescription
                            )
                        },
                        label = { Text(destination.label) }
                    )
                }
            }
        }
    ) { contentPadding ->
        AppNavHost(navController, startDestination, modifier = Modifier.padding(contentPadding))
    }
}

النقاط الرئيسية

  • تعرِض NavigationBar مجموعة من العناصر، ويتوافق كل عنصر مع Destination.
  • تنشئ val navController = rememberNavController() وتتذكّر مثيلاً من NavHostController، الذي يدير عملية التنقّل داخل NavHost.
  • يدير var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } حالة العنصر المحدّد.
    • تعرض startDestination.ordinal الفهرس الرقمي (الموضع) لإدخال التعداد Destination.SONGS.
  • عند النقر على عنصر، يتم استدعاء navController.navigate(route = destination.route) للانتقال إلى الشاشة المقابلة.
  • تعدِّل دالة onClick Lambda الخاصة بـ NavigationBarItem الحالة selectedDestination لتسليط الضوء بشكل مرئي على العنصر الذي تم النقر عليه.
  • تستدعي منطق التنقّل الدالة البرمجية القابلة للإنشاء AppNavHost، مع تمرير navController وstartDestination، لعرض المحتوى الفعلي للشاشة المحدّدة.

النتيجة

تعرض الصورة التالية شريط التنقل الناتج من المقتطف السابق:

شاشة تطبيق تعرض 3 وجهات مُدرَجة أفقيًا في شريط تنقّل سفلي: الأغاني والألبوم وقائمة التشغيل يحتوي كل قسم على رمز ذي صلة به (مثل نوتة موسيقية لقسم "الأغاني").
الشكل 2. شريط تنقّل يحتوي على 3 وجهات مع أيقونات مرتبطة بها: "الأغاني" و"الألبوم" و"قائمة التشغيل".

مراجع إضافية