أشرطة التطبيقات هي حاويات تتيح للمستخدم الوصول إلى الميزات الرئيسية وعناصر التنقّل. هناك نوعان من أشرطة التطبيقات، أشرطة التطبيقات العلوية وأشرطة التطبيقات السفلية. وفي ما يلي مظهر كل منها والغرض منه:
النوع |
المظهر |
الغرض |
|---|---|---|
شريط التطبيق العلوي |
في أعلى الشاشة |
تتيح الوصول إلى المهام والمعلومات الرئيسية. ويحتوي عادةً على عنوان وبنود عمل أساسية وبعض عناصر التنقّل. |
شريط التطبيق السفلي |
في أسفل الشاشة |
يتضمّن عادةً عناصر التنقّل الأساسية. وقد يوفّر أيضًا إمكانية الوصول إلى إجراءات رئيسية أخرى، مثل زر الإجراء الرئيسي المضمَّن. |
لتنفيذ شريط تطبيق علوي وشريط تطبيق سفلي، استخدِم الدالتين المركّبتين TopAppBar وBottomAppBar على التوالي. وتتيح لك إنشاء واجهات متّسقة تتضمّن عناصر التحكّم في التنقّل والإجراءات، وتتوافق مع مبادئ التصميم المتعدد الأبعاد.
أشرطة التطبيقات العلوية
يوضّح الجدول التالي الأنواع الأربعة لأشرطة التطبيقات العلوية:
النوع |
مثال |
|---|---|
صغير: للشاشات التي لا تتطلّب الكثير من التنقّل أو الإجراءات |
|
محاذاة للوسط: للشاشات التي تتضمّن إجراءً رئيسيًا واحدًا |
|
متوسط: للشاشات التي تتطلّب قدرًا متوسطًا من التنقّل والإجراءات. |
|
كبير: للشاشات التي تتطلّب الكثير من التنقّل والإجراءات |
|
مساحة عرض واجهة برمجة التطبيقات
تتشابه الدوال المركّبة المختلفة التي تتيح لك تنفيذ أشرطة التطبيقات العلوية الأربعة المختلفة إلى حد كبير. وتتشارك هذه العناصر في عدة مَعلمات رئيسية:
-
title: النص الذي يظهر في شريط التطبيق -
navigationIcon: الرمز الأساسي للتنقّل يظهر على يسار شريط التطبيق. actions: رموز تتيح للمستخدم الوصول إلى الإجراءات الرئيسية وتظهر على يمين شريط التطبيق.-
scrollBehavior: تحدّد هذه السمة كيفية استجابة شريط التطبيق العلوي للتمرير في المحتوى الداخلي للإطار. -
colors: يحدّد هذا الإعداد كيفية ظهور شريط التطبيق.
سلوك الانتقال
يمكنك التحكّم في كيفية استجابة شريط التطبيق عندما ينتقل المستخدم للأسفل أو للأعلى في المحتوى الداخلي
للسقالة المحدّدة. لإجراء ذلك، أنشئ مثيلاً من
TopAppBarScrollBehavior ومرِّره إلى شريط التطبيقات العلوي للمَعلمة
scrollBehavior.
هناك ثلاثة أنواع من TopAppBarScrollBehavior. وهي على النحو التالي:
-
enterAlwaysScrollBehavior: عندما يسحب المستخدم المحتوى الداخلي للإطار، يتم تصغير شريط التطبيق العلوي. يتوسّع شريط التطبيق عندما يبدأ المستخدم بسحب المحتوى الداخلي للأسفل. 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) } }
يظهر هذا التنفيذ على النحو التالي:
محاذاة للوسط
شريط التطبيق العلوي المحاذي للوسط هو نفسه شريط التطبيق الصغير،
على الرغم من أن العنوان يتوسط المكون. لتنفيذها، استخدِم الدالة المركّبة المخصّصة CenterAlignedTopAppBar.
يستخدم هذا المثال enterAlwaysScrollBehavior() للحصول على القيمة التي يمررها
لـ scrollBehavior. وبالتالي، يتم تصغير الشريط عندما ينتقل المستخدم للأسفل أو للأعلى في المحتوى الداخلي للإطار.
@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) } }
يظهر هذا التنفيذ على النحو التالي:
متوسط
يضع شريط التطبيق العلوي المتوسط العنوان أسفل أي رموز إضافية. لإنشاء
واحد، استخدِم الدالة البرمجية المركّبة 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():
كبير
يشبه شريط التطبيق العلوي الكبير الشريط المتوسط، إلا أنّ المساحة المتروكة بين العنوان والرموز تكون أكبر ويشغل مساحة أكبر على الشاشة بشكل عام. لإنشاء
واحد، استخدِم الدالة البرمجية المركّبة 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) } }
يظهر هذا التنفيذ على النحو التالي:
شريط التطبيق السفلي
لإنشاء شريط تطبيق سفلي، استخدِم الدالة المركّبة 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." ) } }
يظهر هذا التنفيذ على النحو التالي: