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 (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.
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.
| Type | Gedrag | Gebruik |
|---|---|---|
| Modal | Bedekt inhoud, maakt achtergrond donkerder | Telefoons, tijdelijke navigatie |
| Standard | Verschuift inhoud, vast | Tablets, desktop (900+ dp) |
| Rail | Compact zijpaneel met pictogrammen | Tablets, adaptieve navigatie |
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.
// 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.
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.
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 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.
// 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 = trueMaterial 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.
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.
Veelgestelde vragen
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.
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.
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.
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.
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
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.
Lees ook