Drawer — τι είναι, DrawerLayout και πλευρικό μενού σε εφαρμογές

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-23 Χρόνος ανάγνωσης: 12 λεπ

Drawer (Navigation Drawer) — ένα διαδραστικό πλαίσιο που εμφανίζεται από την αριστερή (ή δεξιά) άκρη της οθόνης και προβάλλει συνδέσμους πλοήγησης. Στο Android υλοποιείται μέσω DrawerLayout, στο iOS — μέσω προσαρμοσμένων λύσεων όπως το SideMenu ή του τυπικού UISplitViewController στο iPad. Διαβάστε περισσότερα για τις προδιαγραφές στην τεκμηρίωση του Material Design 3.

Κύρια σημεία

  • Drawer — πλευρικό μενού πλοήγησης που ανοίγει με σάρωση ή κλικ στο εικονίδιο «χάμπουργκερ»
  • DrawerLayout — το τυπικό δοχείο Android για υλοποίηση συρόμενου μενού
  • SideMenu — η δημοφιλής βιβλιοθήκη iOS για προσαρμόσιμο πλευρικό μενού
  • Modal Drawer — καλύπτει το περιεχόμενο, χρησιμοποιείται για εστίαση στην πλοήγηση
  • Standard Drawer — μετατοπίζει το περιεχόμενο δεξιά, αφήνοντας μέρος ορατό

Τι είναι το Drawer;

Drawer (Navigation Drawer) — ένα στοιχείο πλοήγησης σε μορφή πλαισίου που εμφανίζεται από την αριστερή άκρη της οθόνης με χειρονομία σάρωσης ή κλικ στο εικονίδιο «χάμπουργκερ» (τρεις οριζόντιες γραμμές). Το Drawer περιέχει συνδέσμους πλοήγησης, τίτλο και προαιρετικά στοιχεία: άβαταρ χρήστη, μετρητές ειδοποιήσεων, διαχωριστικά. Το πλαίσιο μπορεί να καλύπτει το περιεχόμενο (Modal) ή να το μετατοπίζει (Standard).

Το Material Design 3 (2026) ορίζει το Navigation Drawer ως στοιχείο για εφαρμογές με 6+ σημεία πλοήγησης. Σε αντίθεση με το Bottom Navigation, το Drawer δεν καταλαμβάνει σταθερή θέση στην οθόνη και εμφανίζεται μόνο κατόπιν αιτήματος του χρήστη. Αυτό ελευθερώνει χώρο για περιεχόμενο, αλλά απαιτεί πρόσθετη ενέργεια για άνοιγμα. Η Google συνιστά το Drawer για εφαρμογές με βαθιά ιεραρχία ενοτήτων.

Η έρευνα του UX Planet (2025) έδειξε: Το Drawer είναι κατάλληλο για εφαρμογές με 5–15 ενότητες, αλλά ο χρόνος πλοήγησης είναι 40% υψηλότερος από το Bottom Navigation. Οι χρήστες χάνουν σημεία μενού που βρίσκονται κάτω από την αναδίπλωση της οθόνης (scroll). Επομένως, σημαντικές ενότητες πρέπει να βρίσκονται στο επάνω μέρος του Drawer, και λιγότερο σημαντικές (Σχετικά με την εφαρμογή, Ρυθμίσεις) — στο κάτω μέρος, διαχωρισμένες με διαχωριστικό.

Τύποι Drawer: Modal και Standard

Modal Drawer — εμφανίζεται πάνω από το περιεχόμενο, σκουραίνοντας το φόντο. Χρησιμοποιείται σε κινητές συσκευές όπου η οθόνη είναι περιορισμένη σε πλάτος. Μετά την επιλογή στοιχείου, το Drawer κλείνει αυτόματα. Standard Drawer (Permanent) — ένα σταθερό πλαίσιο, συνεχώς ορατό, που μετατοπίζει το περιεχόμενο. Χρησιμοποιείται σε tablet και επιτραπέζιους υπολογιστές με πλάτος οθόνης από 900 dp. Το Material 3 ορίζει επίσης το Rail Drawer — μια συμπαγή έκδοση για tablet που εμφανίζει μόνο εικονίδια.

ΤύποςΣυμπεριφοράΧρήση
ModalΚαλύπτει περιεχόμενο, σκουραίνει φόντοΤηλέφωνα, προσωρινή πλοήγηση
StandardΜετατοπίζει περιεχόμενο, σταθερόTablet, επιτραπέζιοι (900+ dp)
RailΣυμπαγές πλευρικό πλαίσιο με εικονίδιαTablet, προσαρμοστική πλοήγηση

DrawerLayout στο Android

DrawerLayout — η τυπική ViewGroup στο Android που υλοποιεί το συρόμενο πλευρικό μενού. Το DrawerLayout περιέχει δύο θυγατρικά στοιχεία: πρώτο — το κύριο περιεχόμενο (FrameLayout με NavHostFragment), δεύτερο — NavigationView με μενού. Το DrawerLayout χειρίζεται χειρονομίες σάρωσης και προγραμματιστικό άνοιγμα/κλείσιμο μέσω ActionBarDrawerToggle.

kotlin
// Δραστηριότητα με DrawerLayout και NavigationView
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 με Navigation Component
        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"
//   ...>
//   <!-- Κύριο περιεχόμενο -->
//   <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 — το στοιχείο Material Design για το περιεχόμενο του Drawer. Υποστηρίζει κεφαλίδα (headerLayout), σημεία μενού (menu), υπότιτλους, πλαίσια ελέγχου και σημαίες. Η ιδιότητα app:menu δείχνει σε ένα XML-μενού με σημεία πλοήγησης. Το NavigationUI τονίζει αυτόματα το ενεργό στοιχείο και συγχρονίζει την κατάσταση με το NavController.

Side Menu στο iOS

Στο iOS δεν υπάρχει ενσωματωμένο στοιχείο «Drawer» — η Apple δεν συνιστά πλευρικό μενού για iPhone (HIG, 2026). Ωστόσο, για iPad χρησιμοποιείται UISplitViewController με πλαίσια primary και secondary. Για iPhone, το πλευρικό μενού υλοποιείται μέσω βιβλιοθηκών τρίτων (SideMenu, SwiftUI-side-menu) ή προσαρμοσμένων λύσεων με μετατόπιση περιεχομένου. Στο SwiftUI, το πλευρικό μενού δημιουργείται μέσω ZStack με κίνηση μετατόπισης.

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 }
            }
        }
    }
}

// Χρήση
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 χρησιμοποιείται συχνά η βιβλιοθήκη SideMenu (GitHub, 8k+ αστέρια). Παρέχει έτοιμο UIViewController με υποστήριξη χειρονομιών, θόλωση φόντου, προσαρμοσμένο πλάτος και κινήσεις. Το SideMenu υποστηρίζει αριστερό και δεξί μενού, πολλαπλά επίπεδα και ενσωμάτωση με UIKit μέσω UINavigationController. Εναλλακτική — UISplitViewController στο iPad (συστημικό, χωρίς προσαρμοσμένες κινήσεις).

Προσαρμογή Drawer: τίτλος, εικονίδια, ενότητες

Drawer επιτρέπει εκτεταμένη προσαρμογή. Στο Android, το NavigationView υποστηρίζει headerLayout — μια προσαρμοσμένη διάταξη που τοποθετείται πάνω από τα σημεία μενού. Σε αυτήν τοποθετούνται άβαταρ, όνομα χρήστη, email και εξώφυλλο. Τα σημεία μενού ομαδοποιούνται μέσω <menu> με υπότιτλους, διαχωριστικά και σημαίες. Στο iOS, η προσαρμογή SideMenu περιλαμβάνει ρύθμιση χρώματος φόντου, θόλωσης, πλάτους και στρογγυλοποίησης γωνιών.

kotlin
// Προσαρμοσμένη κεφαλίδα για NavigationView
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"

// Διαμόρφωση σημείων μενού
val menuItem = binding.navView.menu.findItem(R.id.nav_notifications)
menuItem.isChecked = true

// Προσθήκη σήματος
val badge = binding.navView.getOrCreateBadge(R.id.nav_notifications)
badge.number = 15
badge.isVisible = true

Το Material Design συνιστά την ακόλουθη δομή Drawer: τίτλος (όνομα, άβαταρ), κύρια σημεία πλοήγησης (5–8), διαχωριστικό, δευτερεύοντα σημεία (Ρυθμίσεις, Βοήθεια), υποσέλιδο (Σχετικά με την εφαρμογή, έκδοση). Στο Material 3, το NavigationView υποστηρίζει επίσης προσαρμοσμένη επισήμανση του ενεργού στοιχείου μέσω itemShape και itemBackground.

Πότε να χρησιμοποιείτε Drawer: συστάσεις UX

Drawer είναι αποτελεσματικό για εφαρμογές με 6+ ενότητες, ρυθμίσεις και σελίδες βοήθειας. Δεν είναι κατάλληλο για εφαρμογές όπου η γρήγορη πρόσβαση σε ενότητες είναι κρίσιμη — σε τέτοιες περιπτώσεις το Bottom Navigation είναι καλύτερο. Το Material Design συνιστά τον συνδυασμό Drawer με Bottom Navigation: κύρια πλοήγηση — Bottom (3–5 καρτέλες), πρόσθετη — Drawer (ρυθμίσεις, βοήθεια, σχετικά με την εφαρμογή).

Κύρια λάθη κατά την υλοποίηση Drawer: υπερφορτωμένο μενού (15+ σημεία χωρίς ομαδοποίηση), απόκρυψη σημαντικών ενοτήτων κάτω από την αναδίπλωση, έλλειψη εικονιδίων (κείμενο χωρίς εικονίδια σαρώνεται 30% πιο αργά), κίνηση με καθυστερήσεις (πρέπει να είναι ≤ 200 ms). Βέλτιστες πρακτικές: τίτλος με όνομα χρήστη, εικονίδια σε κάθε σημείο, διαχωριστικά μεταξύ ομάδων, επισήμανση ενεργής ενότητας, υποστήριξη χειρονομίας σάρωσης για άνοιγμα.

  • 6+ ενότητες — το Drawer δικαιολογείται, λιγότερες — χρησιμοποιήστε Bottom Navigation
  • Εικονίδια — υποχρεωτικά για κάθε σημείο, επιταχύνουν την οπτική αναζήτηση
  • Ομαδοποίηση — διαχωριστικά μεταξύ κύριων και δευτερευόντων σημείων
  • Τίτλος — άβαταρ, όνομα και email για εξατομίκευση (κοινωνικές εφαρμογές)
  • Χειρονομία σάρωσης — υποχρεωτική για άνοιγμα, αντιγράφεται από το κουμπί «χάμπουργκερ»

Συχνές Ερωτήσεις

Τι διαφορά έχει το Drawer από το Bottom Navigation;

Drawer — κρυφό πλευρικό μενού που ανοίγει με χειρονομία, κατάλληλο για 6+ ενότητες και βαθιά ιεραρχία. Bottom Navigation — πάντα ορατό κάτω πλαίσιο για 3–5 ενότητες. Το Drawer εξοικονομεί χώρο οθόνης αλλά απαιτεί πρόσθετη ενέργεια για άνοιγμα, αυξάνοντας τον χρόνο πλοήγησης κατά 40%.

Πώς προσθέτω Drawer στο SwiftUI;

Το SwiftUI δεν έχει ενσωματωμένο Drawer. Χρησιμοποιήστε ZStack με μετατόπιση περιεχομένου και κίνηση, όπως στο παραπάνω παράδειγμα. Για παραγωγή χρησιμοποιούνται βιβλιοθήκες: SideMenu (Swift Package) ή προσαρμοσμένο περιτύλιγμα γύρω από το UISplitViewController. Σε iPad χρησιμοποιήστε UISplitViewController με preferredDisplayMode .oneBesideSecondary.

Γιατί η Apple δεν συνιστά Drawer στο iPhone;

Το Apple HIG (2026) αναφέρει: το πλευρικό μενού κρύβει περιεχόμενο και παραβιάζει την αρχή του άμεσου χειρισμού. Το iOS συνιστά Tab Bar για πλοήγηση. Το Drawer στο iPhone χρησιμοποιείται μόνο για ρυθμίσεις και πρόσθετες ενέργειες, όχι για κύρια πλοήγηση. Στο iPad, το Drawer αντικαθίσταται από UISplitViewController, που είναι το πρότυπο συστήματος.

Πώς χειρίζομαι τη χειρονομία σάρωσης για Drawer;

Στο Android, το DrawerLayout χειρίζεται αυτόματα τη σάρωση από την αριστερή άκρη. Στο iOS, το προσαρμοσμένο Drawer απαιτεί UIPanGestureRecognizer ή Edge Pan Gesture (SwiftUI — .gesture με DragGesture). Σημαντικό: η σάρωση μπορεί να συγκρουστεί με τη συστημική χειρονομία «Πίσω» — στο iOS, η αριστερή άκρη είναι κατειλημμένη από τη συστημική χειρονομία.

Μπορώ να φτιάξω Drawer στη δεξιά πλευρά;

Ναι. Στο Android, ορίστε android:layout_gravity="end" για το NavigationView. Στο iOS, δημιουργήστε μενού με edge: .trailing. Το δεξιό Drawer χρησιμοποιείται σπανιότερα — για πρόσθετες επιλογές, φίλτρα ή συνομιλίες. Η κύρια πλοήγηση παραμένει αριστερά σύμφωνα με το Material Design και τις προσδοκίες των χρηστών.

Σύνοψη

  • Drawer — πλευρικό μενού πλοήγησης για 6+ ενότητες, ανοίγει με σάρωση ή κλικ στο «χάμπουργκερ»
  • DrawerLayout (Android) — τυπική ViewGroup με ενσωμάτωση Navigation Component μέσω NavigationUI
  • SideMenu (iOS) — δημοφιλής βιβλιοθήκη για προσαρμοσμένο Drawer, καθώς η Apple δεν παρέχει ενσωματωμένο στοιχείο
  • Modal vs Standard — Modal καλύπτει περιεχόμενο (τηλέφωνα), Standard μετατοπίζει περιεχόμενο (tablet 900+ dp)
  • Προσαρμογή — τίτλος με άβαταρ, ομαδοποίηση σημείων, σήματα, επισήμανση ενεργής ενότητας
  • UX — το Drawer είναι 40% πιο αργό από το Bottom Navigation αλλά απαραίτητο για εφαρμογές με βαθιά ιεραρχία
  • Material 3 — το NavigationView υποστηρίζει στυλ, εικονίδια, σήματα και προσαρμοσμένη διάταξη κεφαλίδας

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης