Long Press — het gebaar van lang indrukken, waarbij de vinger gedurende een bepaalde tijd (meestal 0,5–1 seconde) zonder beweging op het scherm wordt gehouden. In tegenstelling tot Tap wordt Long Press niet op het moment van aanraken herkend, maar na het verstrijken van de vertragingstimer. Het gebaar wordt gebruikt voor het oproepen van een contextmenu, voorvertoning, selectie van meerdere objecten en activering van extra acties. Het wordt op iOS geïmplementeerd via UILongPressGestureRecognizer, op Android — via setOnLongClickListener of GestureDetector.
Belangrijkste punten
Long Press (lang indrukken, lang aanraken) — een gebaar van de multi-touch interface, waarbij de gebruiker het scherm aanraakt en de vinger gedurende een bepaalde tijd stil houdt. Het systeem reageert niet onmiddellijk: het wacht op een time-out (meestal 500 ms) en herkent het gebaar pas na het verstrijken ervan als Long Press. Als de vinger eerder wordt losgelaten — wordt het gebaar geïnterpreteerd als een gewone Tap.
Het gebaar is een fundamenteel bouwblok van moderne mobiele interfaces. Apple gebruikt het voor het oproepen van contextmenu's in apps (Messages, Safari, Files). Google heeft Long Press geïmplementeerd in het systeem voor tekstselectie, het verplaatsen van pictogrammen op het bureaublad en het oproepen van contextmenu's in Android. In webinterfaces emuleert lang indrukken vaak de rechtermuisknop op mobiele apparaten die geen fysieke rechterknop hebben.
Historisch gezien is Long Press ontstaan als alternatief voor het contextmenu (rechterklik) voor aanraakschermen. De eerste implementaties zijn te vinden in apparaten met resistieve schermen (Palm, Windows Mobile uit het begin van de jaren 2000), maar het gebaar werd pas gestandaardiseerd met de komst van iPhone en Android. De Human Interface Guidelines van beide platforms beschrijven Long Press als een secundaire actie — geen vervanging van Tap, maar een uitbreiding van de functionaliteit.
Long Press en Tap — twee verschillende gebaren met een verschillende semantiek. Tap (aanraking) — is een onmiddellijke druk: de vinger raakt het scherm aan en wordt binnen 100–300 ms losgelaten. Tap is altijd de primaire actie (primary action): een app openen, een knop indrukken, naar een link gaan. Long Press — secundaire actie (secondary action): een contextmenu openen, bewerken starten, extra informatie tonen.
| Parameter | Tap | Long Press |
|---|---|---|
| Vasthoudtijd | 100–300 ms | 500–1000 ms |
| Actietype | Primair (primary) | Secundair (secondary) |
| Voorbeelden | Link openen, knop indrukken | Contextmenu, bewerken |
| Feedback | Visueel (highlight) | Haptisch (Haptic Feedback) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
Belangrijke regel: gebruik Long Press nooit als de enige manier om een actie uit te voeren. Gebruikers verwachten dat Tap de primaire actie uitvoert en Long Press de extra opties opent. Het schenden van dit principe (bijvoorbeeld lang indrukken vereisen om een link te openen) leidt tot een negatieve gebruikerservaring en verminderde toegankelijkheid.
UILongPressGestureRecognizer — de standaard gebaarherkenner in iOS SDK voor het verwerken van lang indrukken. Het erft van UIGestureRecognizer en ondersteunt configuratie van de minimale duur, toegestane vingerbeweging en het aantal aanrakingen. De herkenner gaat naar de status UIGestureRecognizerStateBegan na het verstrijken van de timer, vervolgens naar UIGestureRecognizerStateChanged bij vingerbeweging en UIGestureRecognizerStateEnded bij loslaten.
// UILongPressGestureRecognizer met configuratie van minimale duur
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// Minimale vasthoudtijd: 0.5 seconde
longPressRecognizer.minimumPressDuration = 0.5
// Toegestane vingerbeweging: 10 punten
longPressRecognizer.allowableMovement = 10
customView.addGestureRecognizer(longPressRecognizer)
}
@objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
guard recognizer.state == .began else { return }
// Contextmenu aanmaken
let location = recognizer.location(in: self.view)
ContextMenuPresenter.show(at: location)
}
}Configuratieparameters: minimumPressDuration — tijd in seconden tot activering (standaard 0.5, voor toegankelijkheid wordt 0.65+ aanbevolen); allowableMovement — maximale vingerbeweging in punten (standaard 10, verhogen helpt bij trillende handen). iOS ondersteunt numberOfTouchesRequired voor multi-touch gebaren (bijvoorbeeld lang indrukken met twee vingers). De herkenner integreert ook met UIContextMenuInteraction — wanneer een contextmenu aan UIView wordt toegevoegd via UIContextMenuConfiguration, roept Long Press automatisch het contextmenu op zonder handmatige implementatie van het gebaar.
setOnLongClickListener — de View-methode in Android SDK die een luisteraar voor lang indrukken instelt. Wanneer de gebruiker View langer dan 500 ms vasthoudt, roept het systeem onLongClick() aan. De methode retourneert een boolean — true betekent dat de gebeurtenis is afgehandeld en niet verder moet worden doorgegeven, false — de gebeurtenis kan ook door andere luisteraars worden afgehandeld. Voor complexere verwerking (vingerbeweging na het starten van Long Press) wordt GestureDetector met OnGestureListener gebruikt.
// Voorbeeld setOnLongClickListener met haptische feedback
val itemView: View = findViewById(R.id.itemView)
itemView.setOnLongClickListener {
// Haptische respons ter bevestiging van het begin van het gebaar
it.performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS
)
// Contextmenu tonen op positie van element
val popup = PopupMenu(this, it)
popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
popup.show()
true // Gebeurtenis afgehandeld
}GestureDetector biedt een fijnere controle over het gebaar. In tegenstelling tot setOnLongClickListener, meldt GestureDetector het begin (onLongPress), beweging (onScroll) en loslaten. Dit maakt de implementatie van complexe scenario's mogelijk — bijvoorbeeld het starten van slepen na lang indrukken (Drag-and-Drop). OnGestureListener vereist de implementatie van zes methoden: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.
Long Press wordt gebruikt in tientallen scenario's van mobiele interfaces. De meest voorkomende toepassing is het contextmenu: lang indrukken op een contact toont communicatieopties (bellen, bericht, e-mail), op een bestand — opties (kopiëren, verplaatsen, verwijderen), op tekst — selectie en klembord. Android Launcher gebruikt lang indrukken op een pictogram voor het verplaatsen van apps en het toevoegen van widgets.
Tekstselectie — een klassiek voorbeeld van Long Press op beide platforms. In iOS activeert lang indrukken op tekst de loep voor cursorpositionering; op een woord — selecteert het met markeringen. In Android selecteert lang indrukken het hele woord en toont het actiepaneel (kopiëren, knippen, plakken). Beide platforms gebruiken vervolgens het slepen van markeringen om de selectie uit te breiden.
Voorvertoning — in iOS opent lang indrukken op een link in Safari of een bericht in Mail een voorvertoning van de inhoud (peek). In Android wordt soortgelijk gedrag geïmplementeerd via Long Press op een melding (breidt de melding uit met actieknoppen). Foto-apps gebruiken lang indrukken op een miniatuur voor snelle voorvertoning van een afbeelding.
Drag-and-Drop wordt vaak geïnitieerd door Long Press. De gebruiker houdt het element vast, het systeem schakelt over naar de sleepmodus en de vingerbeweging verplaatst het element over het scherm. Android ondersteunt dit scenario via View.startDragAndDrop() na Long Press. iOS gebruikt UIDragInteraction, waarbij drag-interactie lang indrukken vereist om te beginnen met slepen.
Human Interface Guidelines van beide platforms geven duidelijke aanbevelingen: Long Press moet altijd een secundaire actie zijn. Maak lang indrukken nooit de enige manier om een kritieke functie uit te voeren. Gebruikers proberen eerst Tap — als Tap niet werkt zoals verwacht, zijn ze teleurgesteld. Voeg visuele aanwijzingen toe: contextmenu's kunnen worden aangegeven met een pictogram met drie puntjes, en elementen die Long Press ondersteunen — met een visuele hint bij aanraking.
Haptische feedback is verplicht voor Long Press. Wanneer het gebaar wordt herkend, moet het apparaat dit bevestigen met een haptische respons: in iOS is dat UIImpactFeedbackGenerator met een lichte impuls, in Android — HapticFeedbackConstants.LONG_PRESS. Zonder haptische feedback is de gebruiker niet zeker of het gebaar is gelukt en kan opnieuw drukken, wat ongewenste acties veroorzaakt.
| Aanbeveling | iOS | Android |
|---|---|---|
| Herkenningstime-out | 0.5–0.65 seconden | 500 ms (standaard) |
| Haptische feedback | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| Visuele feedback | Contextmenu, markering | PopupMenu, ripple-animatie |
| Toegankelijkheid (Accessibility) | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| Max. vingerbeweging | allowableMovement = 10 pt | TouchSlop (standaard ~8 dp) |
| Conflict met scrollen | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
Toegankelijkheid: niet alle gebruikers kunnen lang indrukken uitvoeren (personen met motorische beperkingen, oudere gebruikers). Bied altijd een alternatieve manier om toegang te krijgen tot Long Press-acties — bijvoorbeeld via een «Meer»-knop in de interface of via systeemtoegankelijkheidsfuncties (VoiceOver in iOS, TalkBack in Android). Voor iOS kunnen Custom Actions worden toegevoegd in UIAccessibilityCustomAction, die toegankelijk zijn via de VoiceOver-rotor.
Veelgestelde vragen
De standaardtijd voor Long Press is 0,5 seconde (500 ms) op beide platforms. iOS maakt configuratie van minimumPressDuration van 0.3 tot 1.0 seconde mogelijk. Android gebruikt een vaste time-out van 500 ms voor View.setOnLongClickListener. Voor gebruikers met beperkte mobiliteit wordt aanbevolen de time-out te verhogen naar 0,8–1,0 seconde.
Long Press wordt herkend op basis van vasthoudtijd (0,5 s), 3D Touch — op basis van drukkracht (gram druk). 3D Touch is alleen beschikbaar op iPhone 6S–XR (hardware Force Touch-technologie). Vanaf iOS 13 heeft Apple 3D Touch vervangen door Haptic Touch — een softwarematige imitatie die werkt via Long Press met haptische feedback. Haptic Touch is beschikbaar op alle moderne iPhone en iPad.
Het conflict tussen Long Press en scrollen is een veelvoorkomend probleem. Oplossing: stel delaysTouchesBegan = true in voor de gebaarherkenner in iOS (het systeem verzendt touchesBegan niet onmiddellijk, maar wacht op herkenning van het gebaar). Gebruik in Android onInterceptTouchEvent die false retourneert voor Long Press. Als de gebruiker de vinger begint te bewegen voor de time-out — wordt het gebaar geannuleerd ten gunste van scrollen.
Ja, Long Press wordt ondersteund in webapps via de touchstart/touchend-gebeurtenis met tijdsmeting. Moderne browsers ondersteunen ook de contextmenu-gebeurtenis die wordt geactiveerd bij lang indrukken op mobiele apparaten. Gebruik voor cross-browser compatibiliteit bibliotheken zoals hammer.js of implementeer een aangepaste herkenner via setInterval in de touchstart-handler.
In iOS wordt haptische feedback toegevoegd via UIImpactFeedbackGenerator. Roep impactOccurred() aan op het moment dat UILongPressGestureRecognizer naar de status began gaat. Gebruik voor een lichte respons UIImpactFeedbackGenerator(style: .light). Voor een meer opvallende — .medium. Voor contextmenu's voegt iOS automatisch haptische feedback toe via UIContextMenuInteraction zonder extra code.
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