Bottom Navigation: asoslar, BottomNavigationView va TabView

Muallif: IT Sectr Nashr etilgan: 2026-02-23 O'qish vaqti: 11 daq

Bottom Navigation — bo'limlarni almashtirish paneli ekranning pastki qismida joylashgan navigatsiya namunasi. Android-da BottomNavigationView (Material 3) orqali, iOS-da esa UITabBarController yoki SwiftUI-dagi TabView orqali amalga oshiriladi. Material Design spetsifikatsiyasi haqida batafsil Material Design 3 hujjatlarida o'qing.

Asosiy

  • Bottom Navigation — ilovaning 3–5 asosiy bo'limi o'rtasida almashish uchun pastki panel
  • BottomNavigationView — uchta yorliq ko'rsatish rejimiga ega Android Material 3 komponenti
  • TabView — yorliqlar bilan pastki navigatsiya yaratish uchun SwiftUI ning ichki konteyneri
  • NavigationView + TabView — har bir yorliq ichida stek navigatsiyasi uchun kombinatsiya
  • Material 3 — dinamik ranglar, indikator animatsiyasi va belgilarni qo'llab-quvvatlash

Bottom Navigation nima?

Bottom Navigation — ilovaning asosiy bo'limlari ekranning pastki qismidagi panel orqali mavjud bo'lgan navigatsiya namunasi. Bu usul bir qo'l bilan boshqarish qulayligi tufayli mobil dizayn standartiga aylandi. Yon menyudan (Drawer) farqli o'laroq, Bottom Navigation har doim ko'rinadi va ochish uchun qo'shimcha imo-ishoralarni talab qilmaydi.

Material Design 3 (2026) Navigation Bar-ni uch holatli komponent sifatida belgilaydi: default(belgi + yorliq), labeled (kattalashtirilgan yorliq, bitta faol yorliq) va unlabeled (faqat belgilar). Google Navigation Bar-ni 3–5 teng qiymatli bo'limli ilovalar uchun tavsiya qiladi. 6+ bo'lim uchun — Navigation Drawer. iOS SwiftUI-da TabView tizim uslubi bilan avtomatik ravishda pastki paneldan foydalanadi.

UX Movement (2025) tadqiqoti shuni ko'rsatdiki: Bottom Navigation vazifalarni bajarish vaqtini ochiladigan menyuga nisbatan 27% yaxshilaydi, chunki foydalanuvchi qo'shimcha harakatlarsiz barcha mavjud bo'limlarni ko'radi. Noto'g'ri bosishlar soni katta teginish nishonlari (Android-da kamida 48x48 dp, iOS-da 44x44 pt) tufayli 34% ga kamayadi.

Android-da BottomNavigationView (Material 3)

BottomNavigationView Android-da — Material 3 Library (com.google.android.material.navigation.NavigationBarView) dan komponent. U Material 2 dan eskirgan BottomNavigationView ni almashtirdi va Material You dinamik ranglari, animatsiyalangan faol yorliq indikatori va o'rnatilgan belgilar uchun qo'llab-quvvatlashni qo'shdi. Komponent XML menyu orqali sozlanadi va Navigation Component bilan to'liq mos keladi.

kotlin
// BottomNavigationView va NavHostFragment bilan Activity
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navView = findViewById<NavigationBarView>(R.id.nav_view)
        val navController = findNavController(R.id.nav_host_fragment)

        // Navigatsiyaning avtomatik sinxronizatsiyasi
        navView.setupWithNavController(navController)

        // Belgini sozlash
        val badge = navView.getOrCreateBadge(R.id.navigation_messages)
        badge.number = 8
        badge.badgeGravity = BadgeDrawable.TOP_END
    }
}

// Bottom Navigation uchun XML menyu (res/menu/bottom_nav_menu.xml)
// <?xml version="1.0" encoding="utf-8"?>
// <menu xmlns:android="http://schemas.android.com/apk/res/android">
//   <item android:id="@+id/navigation_home"
//     android:icon="@drawable/ic_home"
//     android:title="Bosh sahifa" />
//   <item android:id="@+id/navigation_messages"
//     android:icon="@drawable/ic_chat"
//     android:title="Chatlar" />
//   <item android:id="@+id/navigation_profile"
//     android:icon="@drawable/ic_person"
//     android:title="Profil" />
// </menu>

Material 3 NavigationBarView uchta labelVisibilityMode rejimini qo'llab-quvvatlaydi: LABEL_VISIBILITY_AUTO (standart — yorliq faol yorliq uchun ko'rsatiladi), LABEL_VISIBILITY_LABELED (barchasida yorliqlar), LABEL_VISIBILITY_UNLABELED (faqat belgilar). Faol yorliqning animatsiyalangan indikatori maxsus ripple effekti bilan itemActiveIndicatorStyle orqali sozlanadi.

iOS uchun SwiftUI-da TabView

TabView — pastki navigatsiya yaratish uchun SwiftUI ning ichki konteyneri. Har bir yorliq .tabItem modifikatori bilan belgi va matn orqali aniqlanadi. TabView avtomatik ravishda UITabBarController yaratadi va barcha mahalliy panel funksiyalarini qo'llab-quvvatlaydi: belgilar, belgi rangi, almashish animatsiyasi va Dynamic Type ga moslashish.

swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            HomeView()
                .tabItem {
                    Label("Bosh sahifa", systemImage: "house.fill")
                }
                .badge(3)

            SearchView()
                .tabItem {
                    Label("Qidirish", systemImage: "magnifyingglass")
                }

            NotificationsView()
                .tabItem {
                    Label("Bildirishnomalar", systemImage: "bell.fill")
                }
                .badge("12")

            ProfileView()
                .tabItem {
                    Label("Profil", systemImage: "person.circle.fill")
                }
        }
    }
}

TabView .badge modifikatorini (iOS 15+) qo'llab-quvvatlaydi, u Int (raqamli belgi) yoki String (matnli) qabul qiladi. Belgining rangini .badgeProminence(.increased) orqali o'zgartirish mumkin — belgini yorqinroq qiladi. Yorliqlarni almashish animatsiyasi .tabViewStyle(.automatic) yoki maxsus uslublar orqali sozlanadi. Dasturiy almashishni nazorat qilish uchun @State selection bilan ishlatiladi.

Pastki va stek navigatsiyasining kombinatsiyasi

Bottom Navigation kamdan-kam hollarda yolg'iz ishlatiladi — har bir yorliq odatda stek navigatorini o'z ichiga oladi (SwiftUI-da NavigationView/NavigationStack, Android-da NavHostFragment). Bunday kombinatsiya foydalanuvchiga ham bo'limlarga tezkor kirish (Tab), ham har bir bo'lim ichida chuqur navigatsiya (Stack) beradi. Bu ishlab chiqarish ilovalari uchun standart arxitekturadir.

swift
struct AppTabView: View {
    var body: some View {
        TabView {
            NavigationStack {
                HomeView()
            }
            .tabItem {
                Label("Bosh sahifa", systemImage: "house")
            }

            NavigationStack {
                SearchView()
            }
            .tabItem {
                Label("Qidirish", systemImage: "magnifyingglass")
            }
        }
    }
}

// HomeView ichida — stek navigatsiyasi
struct HomeView: View {
    var body: some View {
        List(items) { item in
            NavigationLink("\(item.title)", value: item)
        }
        .navigationDestination(for: Item.self) { item in
            ItemDetailView(item: item)
        }
    }
}

Android-da xuddi shu kombinatsiya har bir yorliq uchun NavHostFragment orqali amalga oshiriladi. Navigation Component har bir yorliq uchun back stack yaratishni avtomatlashtiradi: yorliqlar almashtirilganda stek holati saqlanadi, qaytishda — tiklanadi. Bu Google tizim ilovalaridagi (Play Market, YouTube) kabi uzluksiz UX ta'minlaydi.

Material 3: dinamik ranglar va animatsiyalar

Material 3 (Material You) Bottom Navigation-ga asosiy o'zgarish kiritadi — foydalanuvchi fon rasmidan yaratiladigan dinamik ranglar. Tizim fon rasmidan dominant ranglarni ajratib oladi va 5 asosiy tonli palitra yaratadi. NavigationBarView bu ranglarni avtomatik qo'llaydi: faol yorliq primary rangini oladi, faol bo'lmaganlar — onSurface variant.

Faol yorliq indikatorining animatsiyasi silliq bo'ldi: almashish paytida indikator interpolatsiya bilan yangi yorliq tomon animatsiyalanadi. Tegish paytida ripple effekti secondary rangidan foydalanadi. Bottom Navigation Material 3-da shuningdek itemActiveIndicatorStyle orqali maxsus animatsiyalarni qo'llab-quvvatlaydi — dasturchi indikatorning shaklini (oval, to'rtburchak), chetlari va rangini belgilashi mumkin.

xml
<!-- NavigationBarView faol indikatorining uslubi -->
<style name="Widget.MyApp.NavigationBarView.ActiveIndicator"
    parent="Widget.Material3.NavigationBarView.ActiveIndicator">
    <item name="android:height">32dp</item>
    <item name="android:width">64dp</item>
    <item name="android:marginHorizontal">8dp</item>
    <item name="shapeAppearance">
        @style/ShapeAppearance.Material3.Corner.Full
    </item>
    <item name="color">@color/primary_container</item>
</style>

Pastki navigatsiya uchun UX tavsiyalari

Bottom Navigation ni loyihalashda foydalanish qulayligi tadqiqotlarini hisobga olish kerak. NN Group (2026): pastki panelning balandligi kamida 56 dp, teginish nishonlari — kamida 48 dp bo'lishi kerak. Yorliq matni — maksimal 12 belgi (lotin) yoki 8 belgi (kirill). Faol yorliq nafaqat rang bilan, balki belgining holati bilan ham (filled vs outlined) farqlanishi kerak.

Material Design 3 quyidagi namunalarni tavsiya qiladi: 4 yorliq — tinch skanerlash uchun optimal; markazda „+“ belgisi (FloatingActionButton) — asosiy harakat uchun; belgilar — faqat foydalanuvchi harakatlari hisoblagichlari uchun. Quyidagilar tavsiya etilmaydi: 2 yorliq bilan Bottom Navigation ishlatish (yaxshiroq Tab Layout), yorliqlar tartibini dinamik o'zgartirish, panelni ichma-ich ekranlarda yashirish.

  • Balandlik — bosh barmoq bilan qulay teginish uchun kamida 56 dp
  • Kontrast — faol yorliq farqlanishi kerak (rang + belgi to'ldirilishi)
  • Yorliqlar — qisqa, 1-2 so'z, kesilmasdan (12 belgidan ko'p bo'lmagan)
  • Tartib — qat'iy, eng muhimdan kam muhimga
  • Hisoblagichlar — faqat foydalanuvchi bildirishnomalari uchun, marketing uchun emas

Tez-tez beriladigan savollar

Bottom Navigation va Navigation Drawer o'rtasidagi farq nima?

Bottom Navigation — ekranning pastki qismidagi panel, har doim ko'rinadi, 3–5 teng qiymatli bo'lim uchun. Navigation Drawer — imo-ishora yoki tugma bilan chaqiriladigan yon menyu, 6+ bo'lim, sozlamalar va ikkinchi darajali sahifalar uchun. Drawer tarkibni yashiradi, Bottom Navigation — yo'q.

Bottom Navigation uchun nechta yorliq optimal?

4 yorliq — NN Group ma'lumotlariga ko'ra optimal son. 3 — pastki panelni oqlash uchun minimal. 5 — barcha yorliqlar farqlanadigan maksimal. 6+ Navigation Drawer yoki iOS-da „Yana“ bandiga o'tishni talab qiladi.

BottomNavigationView da belgini qanday amalga oshirish mumkin?

Android Material 3 da NavigationBarView da getOrCreateBadge(itemId) dan foydalaning. Raqamni badge.number bilan, pozitsiyani badgeGravity (TOP_END, TOP_START) bilan belgilang. iOS SwiftUI da — .tabItem da .badge(Int) modifikatori. UIKit da — tabBarItem.badgeValue = "N".

Yorliqlarni almashishni animatsiya qilish mumkinmi?

Ha. Material 3 NavigationBarView faol yorliq indikatorining harakatini animatsiya qiladi. SwiftUI TabView iOS tizim animatsiyasidan foydalanadi. Tarkibning maxsus animatsiyalari uchun matchedGeometryEffect (SwiftUI) yoki Transition (Jetpack Compose) dan foydalaning. Panelning o'zini almashish animatsiyasi — tizimli.

Bottom Navigation veb-ilovalar uchun mosmi?

Ha, mobile-first va PWA uchun. Material Design 3 da Navigation Bar veb komponenti mavjud. Biroq, desktopda yon panel (Side Navigation) dan foydalanish yaxshiroq — gorizontal joy ko'proq bandlarni ko'rsatishga imkon beradi. Desktopda Bottom Navigation — antipattern.

Xulosa

  • Bottom Navigation — 3–5 asosiy bo'lim uchun mobil navigatsiyaning standart namunasi
  • NavigationBarView (Android Material 3) va TabView (iOS SwiftUI) — zamonaviy tatbiqlar
  • Material 3 Dynamic Colors — foydalanuvchi fon rasmidan rang palitrasining avtomatik yaratilishi
  • Tab + Stack — ishlab chiqarish arxitekturasi uchun har bir yorliq ichida pastki navigatsiyaning stek bilan kombinatsiyasi
  • Indikator animatsiyasi — yorliqlar almashtirilganda faol indikatorning silliq harakati
  • UX qoidalari — balandlik 56 dp, 4 yorliq, qat'iy tartib, kontrastli faol yorliq
  • Belgilar — ikkala platformada raqamli va nuqtali ko'rsatkichlarning o'rnatilgan qo'llab-quvvatlashi

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