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