نوارهای برنامه محفظههایی هستند که به کاربر امکان دسترسی به ویژگیهای کلیدی و عناصر پیمایش را میدهند. دو نوع نوار برنامه وجود دارد، نوار برنامه برتر و نوار برنامه پایین. ظاهر و هدف هریک از آنها به شرح زیر است:
نوع |
ظاهر |
هدف |
|---|---|---|
نوار برنامه بالا |
در بالای صفحه. |
دسترسی به تکالیف و اطلاعات کلیدی را فراهم میکند. معمولاً عنوان، دستورهای اقدام اصلی، و برخیاز عناصر پیمایش را میزبانی میکند. |
نوار برنامه پایین صفحه |
در پایین صفحه. |
معمولاً شامل عناصر اصلی پیمایش است. همچنین ممکن است دسترسی به کنشهای کلیدی دیگر را فراهم کند، مثلاً ازطریق دکمه کنش شناور محصور. |
برای پیادهسازی نوار برنامه بالا و نوار برنامه پایین، بهترتیب از عناصر ترکیبی 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 ارسال میکند استفاده میکند. بههمین دلیل، وقتی کاربر محتوای داخلی داربست را پیمایش میکند، نوار جمع میشود، اما وقتی کاربر به انتهای محتوای داخلی میرسد، نوار ازهم باز میشود.
@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." ) } }
این پیادهسازی بهصورت زیر نشان داده میشود: