TopAppBar: bu nima, sozlash va Jetpack Compose-da foydalanish

Muallif: IT Sectr Nashr etilgan: 2026-06-29 O'qish vaqti: 8 daq

TopAppBar Material Design komponenti bo'lib, ilovaning yuqori panelini sarlavha, navigatsiya tugmasi va qo'shimcha harakatlar bilan ko'rsatadi. Jetpack Compose-da TopAppBar Material kutubxonasidan TopAppBar composable funksiyasi orqali amalga oshiriladi. Android Developers (2025) rasmiy hujjatlariga ko'ra, TopAppBar Material2 va Material3-ni, jumladan adaptiv balandlik, ranglar va animatsiyani qo'llab-quvvatlaydi. Panel avtomatik ravishda tizim status bariga moslashadi va Insets bilan to'g'ri ishlaydi. TopAppBar Android ilovalarida navigatsiya va kontekst harakatlari uchun asosiy kirish nuqtasi sifatida ishlatiladi.

Asosiy ma'lumotlar

  • TopAppBar — Jetpack Compose-da ilovaning yuqori paneli uchun Material Design composable komponenti
  • Parametrlar moslashuvchan sozlash uchun title, navigationIcon, actions va modifierlarni o'z ichiga oladi
  • Material3 dynamic color va adaptiv bo'shliqlar qo'llab-quvvatlashi bilan TopAppBar taqdim etadi
  • Navigatsiya tugmasi Drawer-ni ochish yoki oldingi ekranga qaytish uchun ishlatiladi
  • ScrollBehavior joyni tejash uchun tarkibni aylantirishda TopAppBar-ni yashirishga imkon beradi

Jetpack Compose-da TopAppBar nima?

TopAppBar — Jetpack Compose uchun Material Design kutubxonasidan ilovaning yuqori panelini (App Bar) amalga oshiradigan composable funksiyadir. Komponent joriy ekran sarlavhasini, chap tomonda navigatsiya tugmasini va o'ng tomonda qo'shimcha harakatlarni ko'rsatadi.

Klassik View tizimidan farqli o'laroq, Compose versiyasi TopAppBar to'liq deklarativdir: panel holat o'zgarganda qayta chiziladi, findViewById orqali boshqarilmaydi. TopAppBar slot API tushunchasidan foydalanadi, bunda title, navigationIcon va actions composable lambda sifatida uzatiladi. Bu merosxo'rliksiz panelning istalgan elementini sozlash imkonini beradi.

Google Material Design (2025) ma'lumotlariga ko'ra, Compose-da TopAppBar uch turda mavjud: CenterAlignedTopAppBar (markazlashtirilgan sarlavha), SmallTopAppBar (standart) va MediumTopAppBar (kengaytirilgan). Har bir tur panel balandligi, sarlavha shrift o'lchami va aylantirishdagi xatti-harakatni belgilaydi. Markazlashtirilgan variant asosiy ekranlarda ko'proq ishlatiladi, MediumTopAppBar esa aylantirishda sarlavha asta-sekin kichiklashadigan tarkib sahifalari uchun.

TopAppBar to'g'ri ishlashi uchun tizim bo'shliqlarini hisobga olish kerak: WindowInsetsCompat-dan Insets. Android Developers (2025) tavsiyalariga ko'ra, Modifier.statusBarsPadding() yoki windowInsetsPadding(WindowInsets.systemBars) chaqiruvi panelning status bar ustiga tushishining oldini oladi.

TopAppBar parametrlari: sarlavha va modifierlarni sozlash

TopAppBar komponenti bir qator majburiy va ixtiyoriy parametrlarni qabul qiladi. Asosiysi title bo'lib, unga sarlavha matni bilan composable bloki uzatiladi. title @Composable lambda bo'lgani uchun faqat matn emas, balki matn bilan ikonka, qidiruv satri yoki taraqqiyot paneli ham joylashtirilishi mumkin.

kotlin
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppTopBar() {
    TopAppBar(
        title = { Text("Asosiy") },
        navigationIcon = {
            IconButton(onClick = { /* open drawer */ }) {
                Icon(
                    Icons.Filled.Menu,
                    contentDescription = "Menu"
                )
            }
        },
        actions = {
            IconButton(onClick = { /* search */ }) {
                Icon(Icons.Filled.Search, contentDescription = "Search")
            }
        }
    )
}

Modifier parametri butun panel uchun bo'shliqlar, o'lcham va tekislashni belgilashga imkon beradi. Modifier.heightIn orqali minimal va maksimal balandlikni cheklash mumkin. colors parametri fon, sarlavha va ikonkalar ranglarini o'zgartirish uchun TopAppBarColors obyektini qabul qiladi.

Sukut bo'yicha TopAppBar joriy MaterialTheme rang sxemasidan foydalanadi. Agar maxsus palitra kerak bo'lsa, TopAppBarDefaults.smallTopAppBarColors() dan foydalaning. Material3-da fon rangi avtomatik ravishda yorug' va qorong'i temalarda surfaceColor ga moslashadi, bu esa qo'lda sozlash zaruratini bartaraf qiladi.

ParametrTurTavsif
title@Composable () -> UnitPanel sarlavha bloki
navigationIcon@Composable () -> UnitNavigatsiya ikonkasi (gamburger/ok)
actions@Composable RowScope.() -> UnitO'ngdagi harakatlar bloki
scrollBehaviorTopAppBarScrollBehavior?Aylantirishdagi xatti-harakat
colorsTopAppBarColorsPanel rang sxemasi

NavigationIcon — TopAppBar ning chap qismida navigatsiyani amalga oshiradigan composable blokdir. Oddiy stsenariylar: Navigation Drawer-ni ochish (Menu ikonkasi), oldingi ekranga qaytish (ArrowBack ikonkasi) yoki joriy ekranni yopish (Close ikonkasi).

Ikonka tanlovi ekranning navigatsiya stekidagi joylashuviga bog'liq. Ekran ildiz bo'lsa — Drawer-ni ochish uchun Menu ikonkasi ko'rsatiladi. Ekran ichki joylashgan bo'lsa — qaytish uchun ArrowBack ikonkasi. Compose-da bu mantiq NavController orqali amalga oshiriladi: joriy back stack yozuvi qaysi ikonka ko'rsatilishini aniqlaydi.

Material Design (2025) tavsiyasiga ko'ra, navigatsiya maydoni kengligi 48 dp — sensorli o'zaro ta'sir uchun standart nishon. Ikonka vizual qayta aloqa (ripple) bilan bosiladigan bo'lishi kerak. Compose-da bu navigatsiyani ishga tushiradigan onClick callback bilan IconButton ga o'rash orqali ta'minlanadi.

Scaffold dan foydalanganda navigatsiya tugmasi to'g'ridan-to'g'ri TopAppBar ga emas, balki Scaffold ga uzatiladigan DrawerState ni takrorlashi mumkin. Bu holda navigationIcon rememberDrawerState orqali Drawer holatiga murojaat qiladi.

Harakatlar va ochiladigan menyuni qo'shish

TopAppBar da actions parametri RowScope konteksti bilan composable blokni qabul qiladi, bu sarlavhaning o'ng tomonida bir nechta ikonka yoki tugmalarni joylashtirishga imkon beradi. Har bir harakat bosiladigan ikonografik element bo'lishi kerak: qidiruv, bildirishnomalar, sozlamalar, sevimlilar.

Haddan tashqari harakatlar uchun DropdownMenu orqali ochiladigan menyu ishlatiladi. Harakatlar soni uchtadan oshsa, qo'shimchalari MoreVert ikonkasi bilan OverflowMenu da joylashtiriladi. Bosilganda yashirin harakatlar ro'yxati ochiladi. DropdownMenu avtomatik ravishda ikonkaga nisbatan pozitsiyalanadi.

kotlin
@Composable
fun TopBarWithOverflow() {
    var menuExpanded by remember { mutableStateOf(false) }
    TopAppBar(
        title = { Text("Profil") },
        actions = {
            IconButton(onClick = { /* share */ }) {
                Icon(Icons.Filled.Share, contentDescription = "Share")
            }
            Box {
                IconButton(onClick = { menuExpanded = true }) {
                    Icon(Icons.Filled.MoreVert, contentDescription = "More")
                }
                DropdownMenu(
                    expanded = menuExpanded,
                    onDismissRequest = { menuExpanded = false }
                ) {
                    DropdownMenuItem(text = { Text("Sozlamalar") }, onClick = { /* navigate */ })
                    DropdownMenuItem(text = { Text("Haqida") }, onClick = { /* navigate */ })
                }
            }
        }
    )
}

Har bir ikonka uchun contentDescription belgilash muhim — bu foydalanish qulayligi talabi. Ta'rifsiz TalkBack tugmani ovoz bilan aytmaydi. Sof dekorativ elementlar uchun contentDescription = null dan foydalaning.

Material3-da TopAppBar: Dynamic Color va moslashuv

Material3 (M3) — Google tomonidan yangi loyihalar uchun tavsiya etilgan Material Design ning joriy versiyasidir. M3 da TopAppBar TopAppBar, CenterAlignedTopAppBar va MediumTopAppBar orqali amalga oshiriladi. Material2 dan asosiy farq — dynamic color, adaptiv balandlik va scroll behavior uchun ichki qo'llab-quvvatlash.

Dynamic Color avtomatik ravishda qurilma fon rasmi asosida panel ranglarini tanlaydi (Android 12+). M3 da TopAppBar fon uchun surfaceColor, sarlavha uchun primary dan foydalanadi. Dynamic color mavjud bo'lmasa, MaterialTheme dan fallback palitrasi qo'llaniladi. Google Material Design (2025) ma'lumotlariga ko'ra, Android 12+ foydalanuvchilarining 63% ilovalarda dynamic color dan foydalanadi.

MediumTopAppBar — katta sarlavhali (32 sp) kengaytirilgan variant bo'lib, aylantirishda asta-sekin 20 sp gacha kichiklashadi va SmallTopAppBar ga aylanadi. Bu effekt TopAppBarDefaults.mediumTopAppBarColors() va scrollBehavior parametri orqali amalga oshiriladi. O'tish animatsiyasi sarlavhaning yig'ilishini kuzatadigan TopAppBarState tomonidan boshqariladi.

kotlin
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MediumTopBarExample() {
    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
    Scaffold(
        topBar = {
            MediumTopAppBar(
                title = { Text("Kutubxona") },
                navigationIcon = {
                    IconButton(onClick = { }) {
                        Icon(Icons.Filled.Menu, contentDescription = "Menu")
                    }
                },
                scrollBehavior = scrollBehavior
            )
        }
    ) { padding ->
        LazyColumn(contentPadding = padding) { /* content */ }
    }
}

Material3 TopAppBar uchun @OptIn(ExperimentalMaterial3Api::class) dan foydalanish kerak — annotatsiya API kelajakdagi versiyalarda o'zgarishi mumkinligini ko'rsatadi. 2025 yilga kelib M3 da TopAppBar experimental bo'lib qolmoqda, ammo Google tegishli tekshirish bilan ishlab chiqarishda foydalanishni tavsiya qiladi.

ScrollBehavior: aylantirishda panelni yashirish

ScrollBehavior — tarkibning vertikal aylantirilishi vaqtida TopAppBar ko'rinishini boshqaradigan mexanizmdir. Jetpack Compose da scrollBehavior panelni yashirish yoki kichiklashtirishga imkon beradi, bu ayniqsa katta tarkib ro'yxati bo'lgan ekranlarda foydalidir.

Material3 uchta strategiyani taqdim etadi: enterAlways (panel yuqoriga aylantirilganda paydo bo'ladi va pastga aylantirilganda yashirinadi), exitUntilCollapsed (panel faqat sarlavha to'liq yig'ilgandan keyin yashirinadi) va TopAppBarScrollBehavior interfeysini amalga oshirish orqali maxsus. Birinchi variant tarkib lentalari uchun, ikkinchisi — MediumTopAppBar bo'lgan ekranlar uchun mos keladi.

ScrollBehavior rememberLazyListState() orqali LazyColumn yoki LazyRow bilan muvofiqlashtirishni talab qiladi. Aylantirish holati scrollBehavior parametri orqali TopAppBar ga uzatiladi. Komponent avtomatik ravishda aylantirish hodisalariga obuna bo'ladi va panel ko'rinishini animatsiya qiladi. Android Developers (2025) ma'lumotlariga ko'ra, enterAlwaysScrollBehavior eng mashhur strategiya bo'lib, aylantiriladigan TopAppBar ga ega ilovalarning 75% ida ishlatiladi.

Maxsus ScrollBehavior sozlash

Maxsus xatti-harakat yaratish uchun TopAppBarScrollBehavior dan meros oling va onScroll va onDrag metodlarini qayta belgilang. Maxsus xatti-harakat standart stsenariylar dizayn talablarini qamrab olmaganda foydalidir — masalan, panel faqat ma'lum aylantirish chegarasidan o'tgandan keyin yashirinishi kerak.

Sukut bo'yicha scrollBehavior tarkib uchun bo'shliq qo'shmaydi — paddingTop ni qo'lda Scaffold da contentPadding yoki LazyColumn da Modifier.padding orqali belgilash kerak. MediumTopAppBar da bo'shliqlar avtomatik ravishda TopAppBarState.collapsedFraction orqali hisoblanadi.

kotlin
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
    topBar = {
        MediumTopAppBar(
            title = { Text("Tarkib") },
            scrollBehavior = scrollBehavior
        )
    }
) { padding ->
    LazyColumn(contentPadding = padding) { /* items */ }
}

ScrollBehavior faqat Material3 da mavjud. Material2 da TopAppBar aylantirishda yashirish uchun ichki qo'llab-quvvatlashga ega emas — o'xshash xatti-harakat uchun NestedScrollConnection orqali qo'lda amalga oshirish talab qilinadi.

Tez-tez so'raladigan savollar

TopAppBar Android-dagi Toolbar dan qanday farq qiladi?

TopAppBar — Compose da App Bar amalga oshirilishi, composable funksiyalar orqali deklarativ ishlaydi. Toolbar — XML sxemasidan View komponenti. TopAppBar avtomatik ravishda Compose mavzusiga moslashadi, slot API ni qo'llab-quvvatlaydi va Activity kodi orqali boshqariladigan Toolbar dan farqli o'laroq, findViewById talab qilmaydi.

TopAppBar soyasini qanday olib tashlash mumkin?

Material3 da soya sukut bo'yicha mavjud emas — TopAppBar elevation o'rniga sirt rangidan (surface) foydalanadi. Material2 da soya elevation = 0.dp parametrini belgilash orqali olib tashlanadi. Qo'shimcha ravishda to'liq o'chirish uchun Modifier.shadow(0.dp) chaqirish mumkin.

TopAppBar ga qidiruv satrini qanday qo'shish mumkin?

title parametrida TextField bilan composable blokni uzating. Qidiruv faollashtirilganda navigationIcon va actions ni shartli renderlash orqali yashiring. Holatni remember orqali saqlang: var isSearching by remember { mutableStateOf(false) }. isSearching = true bo'lganda title da Text o'rniga TextField renderlanadi.

TopAppBar ikki qatorli sarlavhani qo'llab-quvvatlaydimi?

Ha, title parametrida maxsus composable orqali. Bitta Text o'rniga ikkita Text bilan Column ni uzating: birinchisi — asosiy sarlavha (semibold), ikkinchisi — pastki sarlavha (medium, kichikroq o'lcham). MediumTopAppBar yig'ilish animatsiyasi bilan ikki qatorli sarlavha uchun ichki qo'llab-quvvatlashga ega.

Nega TopAppBar status bar ustiga tushadi?

TopAppBar tizim bo'shliqlarini avtomatik hisobga olmaydi. TopAppBar ga Modifier.statusBarsPadding() qo'llash yoki WindowInsets ni boshqaradigan Scaffold dan foydalanish kerak. Material3 da tizim maydonlarini avtomatik hisobga olish uchun windowInsets parametri qo'shilgan.

Xulosa

  • TopAppBar — Jetpack Compose da yuqori panelning asosiy komponenti, title, navigationIcon va actions bilan slot API orqali amalga oshiriladi
  • Material3 uchta variantni taqdim etadi: SmallTopAppBar, CenterAlignedTopAppBar va MediumTopAppBar dynamic color qo'llab-quvvatlashi bilan
  • NavigationIcon Drawer ni ochish yoki qaytish uchun, harakatlar (actions) esa kontekst ikonkalari uchun ishlatiladi
  • ScrollBehavior enterAlways va exitUntilCollapsed strategiyalari orqali aylantirishda TopAppBar ko'rinishini boshqaradi
  • DropdownMenu MoreVert ikonkasi bilan ochiladigan menyuda ortiqcha harakatlarni joylashtirishga imkon beradi
  • Dynamic Color Android 12+ da TopAppBar ranglarini qurilma fon rasmi ga avtomatik moslashtiradi
  • Status bar ustiga tushmaslik uchun Modifier.statusBarsPadding() yoki M3 da windowInsets parametridan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing