أشرطة التطبيقات

أشرطة التطبيقات هي حاويات تتيح للمستخدم الوصول إلى الميزات الرئيسية وعناصر التنقّل. يتوفّر نوعان من أشرطة التطبيقات، وهما شريط التطبيق العلوي وشريط التطبيق السفلي. في ما يلي شكلها والغرض منها:

النوع

المظهر

الغرض

شريط التطبيق العلوي

في أعلى الشاشة

تتيح الوصول إلى المهام والمعلومات الرئيسية. يحتوي عادةً على عنوان وبنود العمل الأساسية وبعض عناصر التنقّل.

شريط التطبيق السفلي

في أسفل الشاشة

يتضمّن عادةً عناصر التنقّل الأساسية. قد يوفّر أيضًا إمكانية الوصول إلى إجراءات رئيسية أخرى، مثل زر الإجراء الرئيسي المضمّن.

مثال على شريط تطبيق علوي وسفلي
الشكل 1. شريط تطبيق علوي (على اليمين) وشريط تطبيق سفلي (على اليسار)

لتنفيذ شريط تطبيق علوي وشريط تطبيق سفلي، استخدِم المركّبين TopAppBar وBottomAppBar على التوالي. تتيح لك إنشاء واجهات متسقة تتضمّن عناصر التحكّم في التنقّل والإجراءات، وتتوافق مع مبادئ التصميم المتعدد الأبعاد.

أشرطة التطبيقات العلوية

يوضّح الجدول التالي أنواع أشرطة التطبيق الأربعة:

النوع

مثال

صغير: للشاشات التي لا تتطلّب الكثير من التنقّل أو الإجراءات

شريط التطبيق العلوي الصغير

محاذاة للوسط: للشاشات التي تتضمّن إجراءً رئيسيًا واحدًا.

شريط تطبيق علوي محاذى للوسط

متوسطة: للشاشات التي تتطلّب قدرًا معتدلاً من التنقّل والإجراءات.

شريط التطبيق العلوي المتوسط

كبير: للشاشات التي تتطلّب الكثير من التنقّل والإجراءات

شريط التطبيق العلوي الكبير

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

تتشابه العناصر القابلة للإنشاء المختلفة التي تتيح لك تنفيذ أربعة أنواع مختلفة من أشرطة التطبيقات في أعلى الشاشة. تتشارك هذه العناصر المركّبة المَعلمات الرئيسية التالية:

  • title: النص الذي يظهر في شريط التطبيق
  • navigationIcon: الرمز الأساسي للتنقّل يظهر على يسار شريط التطبيق.
  • actions: أيقونات تتيح للمستخدم الوصول إلى الإجراءات الرئيسية وتظهر على يسار شريط التطبيق.
  • scrollBehavior: تحدّد طريقة استجابة شريط التطبيق العلوي للتمرير السريع للمحتوى الداخلي في إطار العرض.
  • colors: تحدِّد طريقة ظهور شريط التطبيق.

سلوك التمرير

يمكنك التحكّم في طريقة استجابة شريط التطبيق عندما ينتقل المستخدم للأعلى أو للأسفل في المحتوى الداخلي لـ Scaffold المحدّد. لإجراء ذلك، أنشئ مثيلاً من TopAppBarScrollBehavior ومرِّره إلى شريط التطبيق العلوي للمَعلمة scrollBehavior.

هناك ثلاثة أنواع من TopAppBarScrollBehavior. وهي كما يلي:

  • enterAlwaysScrollBehavior: عندما يسحب المستخدم المحتوى الداخلي الخاص بـ Scaffold، يتم تصغير شريط التطبيق العلوي. يتوسّع شريط التطبيق عندما يبدأ المستخدم في سحب المحتوى الداخلي إلى الأسفل.
  • exitUntilCollapsedScrollBehavior: يشبه enterAlwaysScrollBehavior، إلا أنّ شريط التطبيق لا يتوسّع إلا عندما يسحب المستخدم المحتوى إلى الأسفل.
  • pinnedScrollBehavior: يبقى شريط التطبيق ثابتًا ولا يتفاعل مع التمرير.

تنفّذ الأمثلة التالية العديد من هذه الخيارات.

أمثلة

توفّر الأقسام التالية عمليات تنفيذ لأنواع أربعة مختلفة من أشرطة التطبيقات العلوية، بما في ذلك أمثلة مختلفة حول كيفية التحكّم في سلوك التمرير.

صغير

لإنشاء شريط تطبيق صغير في أعلى الشاشة، استخدِم الدالة المركّبة TopAppBar. يوضّح المثال التالي كيفية تنفيذ شريط تطبيق علوي أساسي يحتوي على عنوان فقط.

في المثال التالي، لا يتم تمرير قيمة إلى TopAppBar للمَعلمة scrollBehavior، وبالتالي لا يتفاعل مع التمرير للأعلى أو للأسفل للمحتوى الداخلي.

@Composable
fun SmallTopAppBarExample() {
    Scaffold(
        topBar = {
            TopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text("Small Top App Bar")
                }
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

تظهر عملية التنفيذ هذه على النحو التالي:

مثال على شريط تطبيق علوي صغير
الشكل 2. شريط تطبيق علوي صغير

محاذاة للوسط

يشبه شريط التطبيق العلوي المحاذى للوسط شريط التطبيق الصغير، إلا أنّ العنوان يكون في وسط المكوّن. لتنفيذها، استخدِم العنصر المركّب CenterAlignedTopAppBar المخصّص.

يستخدم هذا المثال enterAlwaysScrollBehavior() للحصول على القيمة التي يمررها إلى scrollBehavior. وبالتالي، يتم تصغير الشريط عندما يمرّر المستخدم المحتوى الداخلي الخاص بـ Scaffold.

@Composable
fun CenterAlignedTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),

        topBar = {
            CenterAlignedTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Centered Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior,
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

تظهر عملية التنفيذ هذه على النحو التالي:

مثال على شريط تطبيق علوي محاذى للوسط
الشكل 3. شريط تطبيق علوي محاذى للوسط

متوسط

يضع شريط التطبيق العلوي المتوسط الحجم العنوان أسفل أي رموز إضافية. لإنشاء أحدها، استخدِم الدالة المركّبة MediumTopAppBar.

على غرار المقتطف السابق، يستخدم هذا المثال enterAlwaysScrollBehavior() للحصول على القيمة التي يتم تمريرها إلى scrollBehavior.

@Composable
fun MediumTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            MediumTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Medium Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

يظهر هذا التنفيذ على النحو التالي، مع توضيح لكيفية ظهور سلوك التمرير من enterAlwaysScrollBehavior():

الشكل 4. شريط تطبيق متوسط الحجم في أعلى الشاشة يتم تصغيره عندما يتنقّل المستخدم للأعلى وتوسيعه عندما يتنقّل المستخدم للأسفل

كبير

يشبه شريط التطبيق العلوي الكبير الشريط المتوسط، ولكن مع مساحة أكبر بين العنوان والرموز، كما أنّه يشغل مساحة أكبر على الشاشة بشكل عام. لإنشاء أحدها، استخدِم الدالة المركّبة LargeTopAppBar.

على عكس المقتطفات السابقة، يستخدم هذا المثال exitUntilCollapsedScrollBehavior() للحصول على القيمة التي يمرّرها إلى scrollBehavior. وبالتالي، يتم تصغير الشريط عندما ينتقل المستخدم إلى أسفل المحتوى الداخلي في Scaffold، ثم يتم توسيعه عندما ينتقل المستخدم إلى نهاية المحتوى الداخلي.

@Composable
fun LargeTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            LargeTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Large Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

تظهر عملية التنفيذ هذه على النحو التالي:

شاشة في تطبيق تحتوي على شريط تطبيقات سفلي يتضمّن أربعة رموز إجراءات على الجانب الأيسر، وزر إجراء عائم على الجانب الأيمن
الشكل 5. مثال على تنفيذ شريط تطبيق علوي كبير

شريط التطبيق السفلي

لإنشاء شريط تطبيق سفلي، استخدِم الدالة المركّبة BottomAppBar. ويشبه استخدام هذه الدالة المركّبة إلى حد كبير دوال شريط التطبيق العلوي المركّبة الموضّحة في الأقسام السابقة من هذه الصفحة. يمكنك تمرير عناصر قابلة للإنشاء للمَعلمات الرئيسية التالية:

  • actions: سلسلة من الرموز تظهر على يمين الشريط. وتكون هذه العناصر عادةً إما إجراءات رئيسية للشاشة المعيّنة أو عناصر تنقّل.
  • floatingActionButton: زر الإجراء الرئيسي الذي يظهر على الجانب الأيسر من الشريط

@Composable
fun BottomAppBarExample() {
    Scaffold(
        bottomBar = {
            BottomAppBar(
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(Icons.Filled.Check, contentDescription = "Localized description")
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Edit,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Mic,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Image,
                            contentDescription = "Localized description",
                        )
                    }
                },
                floatingActionButton = {
                    FloatingActionButton(
                        onClick = { /* do something */ },
                        containerColor = BottomAppBarDefaults.bottomAppBarFabColor,
                        elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation()
                    ) {
                        Icon(Icons.Filled.Add, "Localized description")
                    }
                }
            )
        },
    ) { innerPadding ->
        Text(
            modifier = Modifier.padding(innerPadding),
            text = "Example of a scaffold with a bottom app bar."
        )
    }
}

تظهر عملية التنفيذ هذه على النحو التالي:

شاشة في تطبيق تحتوي على شريط تطبيقات سفلي يتضمّن أربعة رموز إجراءات على الجانب الأيسر، وزر إجراء عائم على الجانب الأيمن
الشكل 6. مثال على تنفيذ شريط تطبيق سفلي

مراجع إضافية