نوار برنامه

نوار برنامه محفظه‌ای است که دسترسی کاربر به ویژگی‌های کلیدی و موارد پیمایش را فراهم می‌کند. دو نوع نوار برنامه وجود دارد: نوار برنامه بالا و نوار برنامه پایین. ظاهر و هدف هرکدام به‌شرح زیر است:

نوع

ظاهر

هدف

نوار برنامه بالا

در بالای صفحه.

دسترسی به اطلاعات و تکالیف کلیدی را فراهم می‌کند. معمولاً شامل عنوان، دستورهای اقدام اصلی، و برخی موارد پیمایش است.

نوار برنامه پایین صفحه

در پایین صفحه.

معمولاً شامل موارد پیمایش اصلی است. همچنین ممکن است دسترسی به کنش‌های کلیدی دیگر را فراهم کند، مثلاً ازطریق دکمه کنش شناور موجود.

نمونه‌ای از نوار برنامه بالا و پایین.
شکل ۱. نوار برنامه بالا (سمت راست) و نوار برنامه پایین (سمت چپ).

برای پیاده‌سازی نوار برنامه بالا و نوار برنامه پایین، به‌ترتیب از ترکیب‌پذیرهای 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."
        )
    }
}

این پیاده‌سازی به‌صورت زیر نشان داده می‌شود:

صفحه‌ای در برنامه با نوار برنامه پایینی که چهار نماد کنش در سمت چپ و یک دکمه کنش شناور در سمت راست دارد.
شکل ۶.‏ نمونه‌ای از پیاده‌سازی نوار برنامه پایین صفحه.

منابع بیشتر