Drawer — bu nədir, DrawerLayout və tətbiqlərdə yan menyu

Müəllif: IT Sectr Dərc olunub: 2026-02-23 Oxuma vaxtı: 12 dəq

Drawer (Navigation Drawer) — ekranın sol (və ya sağ) kənarından çıxan və naviqasiya keçidlərini göstərən interaktiv panel. Android-də DrawerLayout vasitəsilə, iOS-da isə SideMenu kimi fərdi həllər və ya iPad-də standart UISplitViewController ilə reallaşdırılır. Spesifikasiya haqqında daha ətraflı Material Design 3 sənədlərində oxuyun.

Əsas məqamlar

  • Drawer — sürüşdürmə və ya "hamburger" işarəsinə kliklə açılan yan naviqasiya menyusu
  • DrawerLayout — Android-də çıxan menyunu reallaşdırmaq üçün standart konteyner
  • SideMenu — iOS üçün fərdiləşdirilə bilən yan menyu kitabxanası
  • Modal Drawer — məzmunu örtür, naviqasiyaya diqqət üçün istifadə olunur
  • Standard Drawer — məzmunu sağa sürüşdürür, bir hissəsini görünən qoyur

Drawer nədir?

Drawer (Navigation Drawer) — sürüşdürmə jesti və ya "hamburger" işarəsinə (üç üfüqi xətt) kliklə ekranın sol kənarından çıxan panel şəklində naviqasiya elementi. Drawer naviqasiya keçidləri, başlıq və isteğe bağlı elementləri ehtiva edir: istifadəçi avatarı, bildiriş sayğacları, ayırıcılar. Panel məzmunu örtə (Modal) və ya onu sürüşdirə (Standard) bilər.

Material Design 3 (2026) Navigation Drawer-i 6+ naviqasiya nöqtəsi olan tətbiqlər üçün komponent kimi təyin edir. Bottom Navigation-dən fərqli olaraq, Drawer ekranda daimi yer tutmur və yalnız istifadəçinin istəyi ilə göstərilir. Bu, məzmun üçün yer boşaldır, lakin açmaq üçün əlavə hərəkət tələb edir. Google dərin bölmə iyerarxiyası olan tətbiqlər üçün Drawer-i tövsiyə edir.

UX Planet (2025) araşdırması göstərdi: Drawer 5–15 bölməsi olan tətbiqlər üçün uyğundur, lakin naviqasiya müddəti Bottom Navigation-dən 40% daha yüksəkdir. İstifadəçilər ekranın qatlanma xəttindən aşağıda yerləşən menyu nöqtələrini qaçırırlar (scroll). Buna görə vacib bölmələr Drawer-in yuxarı hissəsində, daha az vacib olanlar (Tətbiq haqqında, Parametrlər) isə aşağı hissədə, ayırıcı ilə ayrılmalıdır.

Drawer növləri: Modal və Standard

Modal Drawer — məzmunun üstünə çıxır, fonu qaraldır. Ekranı məhdud genişlikdə olan mobil cihazlarda istifadə olunur. Nöqtə seçildikdən sonra Drawer avtomatik bağlanır. Standard Drawer (Permanent) — daimi görünən, məzmunu sürüşdirən sabit panel. 900 dp-dən başlayan ekran genişliyi olan planşet və iş stollarında istifadə olunur. Material 3 həmçinin Rail Drawer — yalnız ikonları göstərən planşetlər üçün yığcam versiyanı təyin edir.

NövDavranışİstifadə
ModalMəzmunu örtür, fonu qaraldırTelefonlar, müvəqqəti naviqasiya
StandardMəzmunu sürüşdürür, sabitPlanşetlər, iş stolları (900+ dp)
Railİkonlarla yığcam yan panelPlanşetlər, adaptiv naviqasiya

Android-də DrawerLayout

DrawerLayout — Android-də çıxan yan menyunu reallaşdıran standart ViewGroup. DrawerLayout iki uşaq elementi ehtiva edir: birincisi — əsas məzmun (NavHostFragment ilə FrameLayout), ikincisi — menyu ilə NavigationView. DrawerLayout sürüşdürmə jestlərini və ActionBarDrawerToggle vasitəsilə proqramlı açma/bağlamanı idarə edir.

kotlin
// DrawerLayout və NavigationView ilə Aktiviti
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var drawerLayout: DrawerLayout

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        drawerLayout = binding.drawerLayout
        val navView = binding.navView
        val navController = findNavController(R.id.nav_host_fragment)

        // Drawer-in Navigation Component ilə əlaqələndirilməsi
        NavigationUI.setupActionBarWithNavController(
            this, navController, drawerLayout
        )
        NavigationUI.setupWithNavController(navView, navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp(
            findNavController(R.id.nav_host_fragment),
            drawerLayout
        )
    }
}

// XML: activity_main.xml
// <androidx.drawerlayout.widget.DrawerLayout
//   android:id="@+id/drawerLayout"
//   ...>
//   <!-- Əsas məzmun -->
//   <FrameLayout android:id="@+id/nav_host_fragment"
//     android:layout_width="match_parent"
//     android:layout_height="match_parent" />
//   <!-- Navigation Drawer -->
//   <com.google.android.material.navigation.NavigationView
//     android:id="@+id/navView"
//     android:layout_width="wrap_content"
//     android:layout_height="match_parent"
//     android:layout_gravity="start"
//     app:menu="@menu/nav_menu" />
// </androidx.drawerlayout.widget.DrawerLayout>

NavigationView — Drawer məzmunu üçün Material Design komponenti. Başlıq (headerLayout), menyu nöqtələri (menu), alt başlıqlar, checkboxlar və işarələri dəstəkləyir. app:menu atributu naviqasiya nöqtələri olan XML-menyunu göstərir. NavigationUI avtomatik olaraq aktiv nöqtəni vurğulayır və vəziyyəti NavController ilə sinxronlaşdırır.

iOS-da Side Menu

iOS-da daxili "Drawer" komponenti yoxdur — Apple iPhone üçün yan menyunu tövsiyə etmir (HIG, 2026). Lakin iPad üçün primary və secondary panelləri ilə UISplitViewController istifadə olunur. iPhone üçün yan menyu üçüncü tərəf kitabxanaları (SideMenu, SwiftUI-side-menu) və ya məzmun offseti ilə fərdi həllər vasitəsilə reallaşdırılır. SwiftUI-də yan menyu offset animasiyası ilə ZStack vasitəsilə yaradılır.

swift
import SwiftUI

struct DrawerView<Content: View, Menu: View>: View {
    let menuWidth: CGFloat = 280

    @Binding var isOpen: Bool
    @ViewBuilder let content: Content
    @ViewBuilder let menu: Menu

    var body: some View {
        ZStack(alignment: .leading) {
            content
                .offset(x: isOpen ? menuWidth : 0)
                .animation(.easeInOut, value: isOpen)

            if isOpen {
                menu
                    .frame(width: menuWidth)
                    .transition(.move(edge: .leading))

                Color.black.opacity(0.3)
                    .ignoresSafeArea()
                    .onTapGesture { isOpen = false }
            }
        }
    }
}

// İstifadə
struct ContentView: View {
    @State private var showDrawer = false

    var body: some View {
        DrawerView(isOpen: $showDrawer) {
            NavigationStack {
                HomeView()
                    .toolbar {
                        ToolbarItem(placement: .navigationBarLeading) {
                            Button(action: { showDrawer.toggle() }) {
                                Image(systemName: "line.horizontal.3")
                            }
                        }
                    }
            }
        } menu: {
            DrawerMenuView()
        }
    }
}

iOS-da istehsal layihələrində tez-tez SideMenu kitabxanası istifadə olunur (GitHub, 8k+ ulduz). O, jest dəstəyi, fon bulanıqlığı, fərdi genişlik və animasiyalarla hazır UIViewController təqdim edir. SideMenu sol və sağ menyunu, çoxsəviyyəli strukturları və UIKit ilə UINavigationController vasitəsilə inteqrasiyanı dəstəkləyir. Alternativ — iPad-də UISplitViewController (sistem, fərdi animasiyalar olmadan).

Drawer-in fərdiləşdirilməsi: başlıq, ikonlar, bölmələr

Drawer geniş fərdiləşdirməyə imkan verir. Android-də NavigationView headerLayout-u dəstəkləyir — menyu nöqtələrinin üstündə yerləşdirilən fərdi layout. Orada avatar, istifadəçi adı, email və örtük yerləşdirilir. Menyu nöqtələri <menu> vasitəsilə alt başlıqlar, ayırıcılar və işarələrlə qruplaşdırılır. iOS-da SideMenu fərdiləşdirilməsi fon rəngi, bulanıqlıq, genişlik və künc yuvarlaqlığının tənzimlənməsini əhatə edir.

kotlin
// NavigationView üçün fərdi header
val headerView = binding.navView.inflateHeaderView(R.layout.nav_header)
headerView.findViewById<ImageView>(R.id.iv_avatar)
    .setImageResource(R.drawable.avatar)
headerView.findViewById<TextView>(R.id.tv_name)
    .text = "John Doe"

// Menyu nöqtələrinin konfiqurasiyası
val menuItem = binding.navView.menu.findItem(R.id.nav_notifications)
menuItem.isChecked = true

// Badge əlavə edilməsi
val badge = binding.navView.getOrCreateBadge(R.id.nav_notifications)
badge.number = 15
badge.isVisible = true

Material Design aşağıdakı Drawer strukturunu tövsiyə edir: başlıq (ad, avatar), əsas naviqasiya nöqtələri (5–8), ayırıcı, ikinci dərəcəli nöqtələr (Parametrlər, Kömək), alt bilgi (Tətbiq haqqında, versiya). Material 3-də NavigationView həmçinin itemShape və itemBackground vasitəsilə aktiv nöqtənin fərdi vurğulanmasını dəstəkləyir.

Drawer nə vaxt istifadə edilməlidir: UX tövsiyələri

Drawer 6+ bölməsi, parametrləri və yardım səhifələri olan tətbiqlər üçün effektivdir. Bölmələrə sürətli girişin kritik olduğu tətbiqlər üçün uyğun deyil — belə hallarda Bottom Navigation daha yaxşıdır. Material Design Drawer-i Bottom Navigation ilə birləşdirməyi tövsiyə edir: əsas naviqasiya — Bottom (3–5 tab), əlavə — Drawer (parametrlər, yardım, tətbiq haqqında).

Drawer reallaşdırmasında əsas səhvlər: həddindən artıq yüklənmiş menyu (qruplaşdırmadan 15+ nöqtə), vacib bölmələrin qatlanma xəttinin altında gizlədilməsi, ikonların olmaması (ikonsuz mətn 30% daha yavaş skan edilir), gecikməli animasiya (≤ 200 ms olmalıdır). Ən yaxşı təcrübələr: istifadəçi adı ilə başlıq, hər nöqtədə ikonlar, qruplar arasında ayırıcılar, aktiv bölmənin vurğulanması, açmaq üçün sürüşdürmə jestinin dəstəklənməsi.

  • 6+ bölmə — Drawer əsaslandırılmışdır, azdırsa — Bottom Navigation istifadə edin
  • İkonlar — hər nöqtə üçün məcburidir, vizual axtarışı sürətləndirir
  • Qruplaşdırma — əsas və ikinci dərəcəli nöqtələr arasında ayırıcılar
  • Başlıq — fərdiləşdirmə üçün avatar, ad və email (sosial tətbiqlər)
  • Sürüşdürmə jesti — açmaq üçün məcburidir, "hamburger" düyməsi ilə təkrarlanır

Tez-tez verilən suallar

Drawer Bottom Navigation-dən nə ilə fərqlənir?

Drawer — jestlə açılan gizli yan menyu, 6+ bölmə və dərin iyerarxiya üçün uyğundur. Bottom Navigation — 3–5 bölmə üçün həmişə görünən aşağı panel. Drawer ekran yerinə qənaət edir, lakin açmaq üçün əlavə hərəkət tələb edir, bu da naviqasiya vaxtını 40% artırır.

SwiftUI-də Drawer necə əlavə edilir?

SwiftUI-də daxili Drawer yoxdur. Yuxarıdakı nümunədəki kimi məzmun offseti və animasiya ilə ZStack istifadə edin. İstehsal üçün kitabxanalar tətbiq olunur: SideMenu (Swift Package) və ya UISplitViewController üzərində fərdi sarğı. iPad-də preferredDisplayMode .oneBesideSecondary ilə UISplitViewController istifadə edin.

Niyə Apple iPhone-da Drawer-i tövsiyə etmir?

Apple HIG (2026) bildirir: yan menyu məzmunu gizlədir və birbaşa manipulyasiya prinsipini pozur. iOS naviqasiya üçün Tab Bar-ı tövsiyə edir. iPhone-da Drawer yalnız parametrlər və əlavə hərəkətlər üçün istifadə olunur, əsas naviqasiya üçün deyil. iPad-də Drawer sistem standartı olan UISplitViewController ilə əvəz olunur.

Drawer üçün sürüşdürmə jestini necə idarə etmək olar?

Android-də DrawerLayout avtomatik olaraq sol kənardan sürüşdürməni idarə edir. iOS-da fərdi Drawer UIPanGestureRecognizer və ya Edge Pan Gesture tələb edir (SwiftUI — DragGesture ilə .gesture). Vacib: sürüşdürmə sistem "Geri" jesti ilə ziddiyyət təşkil edə bilər — iOS-da sol kənar sistem jesti ilə işğal olunub.

Drawer-i sağ tərəfdən etmək olarmı?

Bəli. Android-də NavigationView üçün android:layout_gravity="end" təyin edin. iOS-da edge: .trailing ilə menyu yaradın. Sağ tərəfli Drawer daha az istifadə olunur — əlavə seçimlər, filtrlər və ya söhbətlər üçün. Əsas naviqasiya Material Design və istifadəçi gözləntilərinə uyğun olaraq solda qalır.

Nəticə

  • Drawer — 6+ bölmə üçün yan naviqasiya menyusu, sürüşdürmə və ya "hamburger" kliklə açılır
  • DrawerLayout (Android) — NavigationUI vasitəsilə Navigation Component inteqrasiyası ilə standart ViewGroup
  • SideMenu (iOS) — fərdi Drawer üçün məşhur kitabxana, çünki Apple daxili komponent təqdim etmir
  • Modal vs Standard — Modal məzmunu örtür (telefonlar), Standard məzmunu sürüşdürür (planşetlər 900+ dp)
  • Fərdiləşdirmə — avatar ilə başlıq, nöqtələrin qruplaşdırılması, nişanlar, aktiv bölmənin vurğulanması
  • UX — Drawer Bottom Navigation-dən 40% yavaşdır, lakin dərin iyerarxiyalı tətbiqlər üçün zəruridir
  • Material 3 — NavigationView stilləri, ikonları, nişanları və fərdi header layout-u dəstəkləyir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun