Drawer — wat is het, DrawerLayout en zijmenu in apps

Auteur: IT Sectr Gepubliceerd: 2026-02-23 Leestijd: 12 min

Drawer (Navigation Drawer) — een interactief paneel dat van de linker (of rechter) rand van het scherm schuift en navigatielinks weergeeft. Op Android wordt het geïmplementeerd via DrawerLayout, op iOS via aangepaste oplossingen zoals SideMenu of de standaard UISplitViewController op iPad. Lees meer over de specificatie in de documentatie van Material Design 3.

Belangrijkste

  • Drawer — zij navigatiemenu dat opent door te vegen of te klikken op het 'hamburger'-pictogram
  • DrawerLayout — de standaard Android-container voor het implementeren van een schuifmenu
  • SideMenu — de populaire iOS-bibliotheek voor een aanpasbaar zijmenu
  • Modal Drawer — bedekt de inhoud, gebruikt voor focus op navigatie
  • Standard Drawer — verschuift de inhoud naar rechts, laat een deel zichtbaar

Wat is Drawer?

Drawer (Navigation Drawer) — een navigatie-element in de vorm van een paneel dat van de linkerrand van het scherm schuift door een veegbeweging of klik op het 'hamburger'-pictogram (drie horizontale lijnen). Drawer bevat navigatielinks, een titel en optionele elementen: gebruikersavatar, meldingstellingen, scheidingstekens. Het paneel kan de inhoud bedekken (Modal) of verschuiven (Standard).

Material Design 3 (2026) definieert Navigation Drawer als een component voor apps met 6+ navigatiepunten. In tegenstelling tot Bottom Navigation neemt Drawer geen vaste plek op het scherm in en wordt alleen getoond op verzoek van de gebruiker. Dit maakt ruimte vrij voor inhoud, maar vereist een extra actie om te openen. Google beveelt Drawer aan voor apps met een diepe hiërarchie van secties.

Onderzoek van UX Planet (2025) toonde aan: Drawer is geschikt voor apps met 5–15 secties, maar de navigatietijd is 40% hoger dan bij Bottom Navigation. Gebruikers missen menu-items onder de vouw van het scherm (scroll). Daarom moeten belangrijke secties bovenaan de Drawer staan en minder belangrijke (Over de app, Instellingen) onderaan, gescheiden door een scheidingsteken.

Typen Drawer: Modal en Standard

Modal Drawer — schuift over de inhoud heen, maakt de achtergrond donkerder. Gebruikt op mobiele apparaten waar het scherm beperkt is in breedte. Na het selecteren van een item sluit Drawer automatisch. Standard Drawer (Permanent) — een vast paneel, permanent zichtbaar, dat de inhoud verschuift. Gebruikt op tablets en desktop met een schermbreedte vanaf 900 dp. Material 3 definieert ook Rail Drawer — een compacte versie voor tablets die alleen pictogrammen toont.

TypeGedragGebruik
ModalBedekt inhoud, maakt achtergrond donkerderTelefoons, tijdelijke navigatie
StandardVerschuift inhoud, vastTablets, desktop (900+ dp)
RailCompact zijpaneel met pictogrammenTablets, adaptieve navigatie

DrawerLayout in Android

DrawerLayout — de standaard ViewGroup in Android die een schuifbaar zijmenu implementeert. DrawerLayout bevat twee onderliggende elementen: de eerste — de hoofdinhoud (FrameLayout met NavHostFragment), de tweede — NavigationView met het menu. DrawerLayout verwerkt veegbewegingen en programmatisch openen/sluiten via ActionBarDrawerToggle.

kotlin
// Activiteit met DrawerLayout en 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 koppelen aan 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"
//   ...>
//   <!-- Hoofdinhoud -->
//   <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 — de Material Design-component voor de inhoud van de Drawer. Het ondersteunt een titel (headerLayout), menu-items (menu), subtitels, selectievakjes en vlaggen. Het attribuut app:menu verwijst naar een XML-menu met navigatiepunten. NavigationUI markeert automatisch het actieve item en synchroniseert de status met NavController.

Side Menu in iOS

iOS heeft geen ingebouwde 'Drawer'-component — Apple raadt een zijmenu af voor iPhone (HIG, 2026). Voor iPad wordt echter UISplitViewController gebruikt met primary en secondary panelen. Voor iPhone wordt het zijmenu geïmplementeerd via bibliotheken van derden (SideMenu, SwiftUI-side-menu) of aangepaste oplossingen met inhoudsoffset. In SwiftUI wordt het zijmenu gemaakt via ZStack met offset-animatie.

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

// Gebruik
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()
        }
    }
}

Voor productieprojecten op iOS wordt vaak de bibliotheek SideMenu gebruikt (GitHub, 8k+ sterren). Het biedt een kant-en-klare UIViewController met ondersteuning voor gebaren, achtergrondvervaging, aangepaste breedte en animaties. SideMenu ondersteunt linker- en rechtermenu's, meerdere niveaus en integratie met UIKit via UINavigationController. Alternatief — UISplitViewController op iPad (systeemeigen, zonder aangepaste animaties).

Drawer aanpassen: titel, pictogrammen, secties

Drawer biedt uitgebreide aanpassingsmogelijkheden. In Android ondersteunt NavigationView headerLayout — een aangepaste layout boven de menu-items. Hierin worden avatar, gebruikersnaam, e-mail en omslag geplaatst. Menu-items worden gegroepeerd via <menu> met subtitels, scheidingstekens en vlaggen. Op iOS omvat het aanpassen van SideMenu het instellen van de achtergrondkleur, vervaging, breedte en afronding van hoeken.

kotlin
// Aangepaste header voor 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"

// Menu-items configureren
val menuItem = binding.navView.menu.findItem(R.id.nav_notifications)
menuItem.isChecked = true

// Badge toevoegen
val badge = binding.navView.getOrCreateBadge(R.id.nav_notifications)
badge.number = 15
badge.isVisible = true

Material Design beveelt de volgende Drawer-structuur aan: titel (naam, avatar), hoofdnavigatie-items (5–8), scheidingsteken, secundaire items (Instellingen, Help), voettekst (Over de app, versie). In Material 3 ondersteunt NavigationView ook het aanpassen van de markering van het actieve item via itemShape en itemBackground.

Wanneer Drawer gebruiken: UX-aanbevelingen

Drawer is effectief voor apps met 6+ secties, instellingen en hulppagina's. Het is niet geschikt voor apps waar snelle toegang tot secties cruciaal is — in zulke gevallen is Bottom Navigation beter. Material Design beveelt aan om Drawer te combineren met Bottom Navigation: hoofdnavigatie — Bottom (3–5 tabbladen), aanvullend — Drawer (instellingen, help, over de app).

Belangrijkste fouten bij het implementeren van Drawer: overbelast menu (15+ items zonder groepering), belangrijke secties verbergen onder de vouw, ontbrekende pictogrammen (tekst zonder pictogrammen wordt 30% langzamer gescand), animatie met vertragingen (moet ≤ 200 ms zijn). Beste praktijken: titel met gebruikersnaam, pictogrammen bij elk item, scheidingstekens tussen groepen, markering van de actieve sectie, ondersteuning voor veegbeweging om te openen.

  • 6+ secties — Drawer is gerechtvaardigd, minder — gebruik Bottom Navigation
  • Pictogrammen — verplicht voor elk item, versnelt visueel zoeken
  • Groepering — scheidingstekens tussen hoofd- en secundaire items
  • Titel — avatar, naam en e-mail voor personalisatie (sociale apps)
  • Veegbeweging — verplicht om te openen, gedupliceerd door 'hamburger'-knop

Veelgestelde vragen

Waarin verschilt Drawer van Bottom Navigation?

Drawer — een verborgen zijmenu dat opent met een gebaar, geschikt voor 6+ secties en diepe hiërarchie. Bottom Navigation — altijd zichtbaar onderpaneel voor 3–5 secties. Drawer bespaart schermruimte maar vereist een extra actie om te openen, wat de navigatietijd met 40% verhoogt.

Hoe voeg ik Drawer toe in SwiftUI?

SwiftUI heeft geen ingebouwde Drawer. Gebruik ZStack met inhoudsoffset en animatie, zoals in het voorbeeld hierboven. Voor productie worden bibliotheken gebruikt: SideMenu (Swift Package) of een aangepaste wrapper rond UISplitViewController. Gebruik op iPad UISplitViewController met preferredDisplayMode .oneBesideSecondary.

Waarom raadt Apple Drawer af op iPhone?

Apple HIG (2026) stelt: een zijmenu verbergt inhoud en schendt het principe van directe manipulatie. iOS beveelt Tab Bar aan voor navigatie. Drawer op iPhone wordt alleen gebruikt voor instellingen en extra acties, niet voor hoofdnavigatie. Op iPad wordt Drawer vervangen door UISplitViewController, de systeemstandaard.

Hoe verwerk ik de veegbeweging voor Drawer?

In Android verwerkt DrawerLayout automatisch het vegen van de linkerrand. In iOS vereist een aangepaste Drawer UIPanGestureRecognizer of Edge Pan Gesture (SwiftUI — .gesture met DragGesture). Belangrijk: het vegen kan conflicteren met de systeem 'Terug'-veegbeweging — op iOS is de linkerrand bezet door de systeembeweging.

Kan ik Drawer aan de rechterkant maken?

Ja. Stel in Android android:layout_gravity="end" in voor NavigationView. Maak in iOS het menu met edge: .trailing. Een rechtszijdige Drawer wordt minder vaak gebruikt — voor extra opties, filters of chats. De hoofdnavigatie blijft links volgens Material Design en gebruikersverwachtingen.

Samenvatting

  • Drawer — zij navigatiemenu voor 6+ secties, geopend door vegen of klikken op 'hamburger'
  • DrawerLayout (Android) — standaard ViewGroup met Navigation Component-integratie via NavigationUI
  • SideMenu (iOS) — populaire bibliotheek voor aangepaste Drawer, omdat Apple geen ingebouwde component biedt
  • Modal vs Standard — Modal bedekt inhoud (telefoons), Standard verschuift inhoud (tablets 900+ dp)
  • Aanpassen — titel met avatar, groeperen van items, badges, markeren van actieve sectie
  • UX — Drawer is 40% langzamer dan Bottom Navigation maar noodzakelijk voor apps met diepe hiërarchie
  • Material 3 — NavigationView ondersteunt stijlen, pictogrammen, badges en aangepaste header layout

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook