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