نوار برنامه

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

نوع

ظاهر

هدف

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

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

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

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

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

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

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

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

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

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

منابع بیشتر