نوار برنامه محفظهای است که دسترسی کاربر به ویژگیهای کلیدی و موارد پیمایش را فراهم میکند. دو نوع نوار برنامه وجود دارد: نوار برنامه بالا و نوار برنامه پایین. ظاهر و هدف هرکدام بهشرح زیر است:
نوع |
ظاهر |
هدف |
|---|---|---|
نوار برنامه بالا |
در بالای صفحه. |
دسترسی به اطلاعات و تکالیف کلیدی را فراهم میکند. معمولاً شامل عنوان، دستورهای اقدام اصلی، و برخی موارد پیمایش است. |
نوار برنامه پایین صفحه |
در پایین صفحه. |
معمولاً شامل موارد پیمایش اصلی است. همچنین ممکن است دسترسی به کنشهای کلیدی دیگر را فراهم کند، مثلاً ازطریق دکمه کنش شناور موجود. |
برای پیادهسازی نوار برنامه بالا و نوار برنامه پایین، بهترتیب از ترکیبپذیرهای TopAppBar و BottomAppBar استفاده کنید. این مؤلفهها به شما امکان میدهند واسطهای ثابتی ایجاد کنید که کنترلهای پیمایش و کنش را کپسولهسازی میکنند و با اصول «طراحی مواد» همسو هستند.
نوار برنامه بالا
جدول زیر چهار نوع نوار برنامه بالا را نشان میدهد:
نوع |
مثال |
|---|---|
کوچک: برای صفحههایی که به پیمایش یا کنشهای زیادی نیاز ندارند. |
|
ترازشده از وسط: برای صفحههایی که یک کنش اصلی دارند. |
|
متوسط: برای صفحههایی که به مقدار متوسطی پیمایش و کنش نیاز دارند. |
|
بزرگ: برای صفحههایی که به پیمایش و کنشهای زیادی نیاز دارند. |
|
سطح میانای برنامهسازی کاربردی
The various composables that allow you to implement the four different top app bars are quite similar. آنها چند پارامتر کلیدی مشترک دارند:
-
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." ) } }
این پیادهسازی بهصورت زیر نشان داده میشود: