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