Long Press — gesten för lång tryckning, där fingret hålls på skärmen under en viss tid (vanligtvis 0,5–1 sekund) utan rörelse. Till skillnad från Tap känns Long Press inte igen vid beröringsögonblicket, utan efter att fördröjningstimern har löpt ut. Gesten används för att anropa en snabbmeny, förhandsgranskning, markera flera objekt och aktivera ytterligare åtgärder. Den implementeras på iOS via UILongPressGestureRecognizer, på Android — via setOnLongClickListener eller GestureDetector.
Huvudpunkter
Long Press (lång tryckning, lång beröring) — en gest i multitouch-gränssnittet, där användaren vidrör skärmen och håller fingret stilla under en viss tid. Systemet reagerar inte omedelbart: det väntar på en timeout (vanligtvis 500 ms) och först efter att den har löpt ut känns gesten igen som Long Press. Om fingret släpps tidigare — tolkas gesten som en vanlig Tap.
Gesten är en grundläggande byggsten i moderna mobila gränssnitt. Apple använder den för att anropa snabbmenyer i appar (Messages, Safari, Files). Google har implementerat Long Press i systemet för textmarkering, flyttning av ikoner på skrivbordet och anropande av snabbmenyer i Android. I webbgränssnitt efterliknar lång tryckning ofta högerklick på mobila enheter som saknar en fysisk högerknapp.
Historiskt sett uppstod Long Press som ett alternativ till snabbmenyn (högerklick) för pekskärmar. De första implementeringarna finns i enheter med resistiva skärmar (Palm, Windows Mobile från början av 2000-talet), men gesten standardiserades först med ankomsten av iPhone och Android. Human Interface Guidelines för båda plattformarna beskriver Long Press som en sekundär åtgärd — inte en ersättning för Tap, utan en utvidgning av funktionaliteten.
Long Press och Tap — två olika gester med olika semantik. Tap (beröring) — är en omedelbar tryckning: fingret vidrör skärmen och släpps inom 100–300 ms. Tap är alltid primär åtgärd (primary action): öppna en app, trycka på en knapp, gå till en länk. Long Press — sekundär åtgärd (secondary action): öppna en snabbmeny, påbörja redigering, visa ytterligare information.
| Parameter | Tap | Long Press |
|---|---|---|
| Hålltid | 100–300 ms | 500–1000 ms |
| Åtgärdstyp | Primär (primary) | Sekundär (secondary) |
| Exempel | Öppna länk, trycka på knapp | Snabbmeny, redigering |
| Återkoppling | Visuell (highlight) | Haptisk (Haptic Feedback) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
Nyckelregel: använd aldrig Long Press som enda sättet att utföra en åtgärd. Användare förväntar sig att Tap utför den primära åtgärden och Long Press öppnar ytterligare alternativ. Brott mot denna princip (till exempel att kräva lång tryckning för att öppna en länk) leder till negativ användarupplevelse och minskad tillgänglighet.
UILongPressGestureRecognizer — standardgestigenkännaren i iOS SDK för hantering av lång tryckning. Den ärver från UIGestureRecognizer och stöder konfiguration av minimilängd, tillåten fingerförflyttning och antal beröringar. Igenkännaren övergår till tillståndet UIGestureRecognizerStateBegan efter att timern har löpt ut, därefter till UIGestureRecognizerStateChanged vid fingerförflyttning och UIGestureRecognizerStateEnded vid släpp.
// UILongPressGestureRecognizer med konfiguration av minimilängd
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// Minsta hålltid: 0.5 sekunder
longPressRecognizer.minimumPressDuration = 0.5
// Tillåten fingerförflyttning: 10 punkter
longPressRecognizer.allowableMovement = 10
customView.addGestureRecognizer(longPressRecognizer)
}
@objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
guard recognizer.state == .began else { return }
// Skapa snabbmeny
let location = recognizer.location(in: self.view)
ContextMenuPresenter.show(at: location)
}
}Konfigurationsparametrar: minimumPressDuration — tid i sekunder till aktivering (standard 0.5, för tillgänglighet rekommenderas 0.65+); allowableMovement — maximal fingerförflyttning i punkter (standard 10, ökning hjälper vid darrning). iOS stöder numberOfTouchesRequired för multitouch-gester (till exempel lång tryckning med två fingrar). Igenkännaren integreras också med UIContextMenuInteraction — när en snabbmeny läggs till en UIView via UIContextMenuConfiguration, anropar Long Press automatiskt snabbmenyn utan manuell implementering av gesten.
setOnLongClickListener — View-metoden i Android SDK som ställer in en lyssnare för lång tryckning. När användaren håller View längre än 500 ms, anropar systemet onLongClick(). Metoden returnerar en boolean — true betyder att händelsen har hanterats och inte ska vidarebefordras, false — händelsen kan även hanteras av andra lyssnare. För mer komplex hantering (fingerförflyttning efter start av Long Press) används GestureDetector med OnGestureListener.
// Exempel på setOnLongClickListener med haptisk återkoppling
val itemView: View = findViewById(R.id.itemView)
itemView.setOnLongClickListener {
// Haptisk respons för att bekräfta start av gesten
it.performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS
)
// Visa snabbmeny på elementets position
val popup = PopupMenu(this, it)
popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
popup.show()
true // Händelsen hanterad
}GestureDetector ger finare kontroll över gesten. Till skillnad från setOnLongClickListener, meddelar GestureDetector om start (onLongPress), förflyttning (onScroll) och släpp. Detta möjliggör implementering av komplexa scenarier — till exempel att påbörja dragning efter lång tryckning (Drag-and-Drop). OnGestureListener kräver implementering av sex metoder: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.
Long Press används i dussintals scenarier inom mobila gränssnitt. Den vanligaste tillämpningen är snabbmenyn: lång tryckning på en kontakt visar kommunikationsalternativ (samtal, meddelande, e-post), på en fil — alternativ (kopiera, flytta, ta bort), på text — markering och urklipp. Android Launcher använder lång tryckning på en ikon för att flytta appar och lägga till widgetar.
Textmarkering — ett klassiskt exempel på Long Press på båda plattformarna. I iOS aktiverar lång tryckning på text förstoringsglaset för att positionera markören; på ett ord — markerar det med markörer. I Android markerar lång tryckning hela ordet och visar åtgärdspanelen (kopiera, klipp ut, klistra in). Båda plattformarna använder sedan dragning av markörer för att utöka markeringen.
Förhandsgranskning — i iOS öppnar lång tryckning på en länk i Safari eller ett meddelande i Mail en förhandsgranskning av innehållet (peek). I Android implementeras liknande beteende via Long Press på en notis (expanderar notisen med åtgärdsknappar). Foto-appar använder lång tryckning på en miniatyr för snabb förhandsgranskning av en bild.
Drag-and-Drop initieras ofta av Long Press. Användaren håller elementet, systemet växlar till dragläge och fingerförflyttningen flyttar elementet över skärmen. Android stöder detta scenario via View.startDragAndDrop() efter Long Press. iOS använder UIDragInteraction, där draginteraktion kräver lång tryckning för att påbörja dragningen.
Human Interface Guidelines för båda plattformarna ger tydliga rekommendationer: Long Press bör alltid vara en sekundär åtgärd. Gör aldrig lång tryckning till det enda sättet att utföra en kritisk funktion. Användare provar först Tap — om Tap inte fungerar som förväntat blir de besvikna. Lägg till visuella ledtrådar: snabbmenyer kan markeras med en ikon med tre punkter och element som stöder Long Press — med en visuell ledtråd vid beröring.
Haptisk återkoppling är obligatorisk för Long Press. När gesten känns igen bör enheten bekräfta detta med en haptisk respons: i iOS är det UIImpactFeedbackGenerator med en lätt impuls, i Android — HapticFeedbackConstants.LONG_PRESS. Utan haptisk återkoppling är användaren inte säker på att gesten fungerade och kan trycka igen, vilket orsakar oönskade åtgärder.
| Rekommendation | iOS | Android |
|---|---|---|
| Igenkänningstimeout | 0.5–0.65 sekunder | 500 ms (standard) |
| Haptisk återkoppling | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| Visuell återkoppling | Snabbmeny, markering | PopupMenu, ripple-animering |
| Tillgänglighet (Accessibility) | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| Max. fingerförflyttning | allowableMovement = 10 pt | TouchSlop (standard ~8 dp) |
| Konflikt med scrollning | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
Tillgänglighet: inte alla användare kan utföra lång tryckning (personer med motoriska funktionsnedsättningar, äldre användare). Erbjud alltid ett alternativt sätt att komma åt Long Press-åtgärder — till exempel via en «Mer»-knapp i gränssnittet eller via systemets tillgänglighetsfunktioner (VoiceOver i iOS, TalkBack i Android). För iOS kan Custom Actions läggas till i UIAccessibilityCustomAction som är tillgängliga via VoiceOver-rotorn.
Vanliga frågor
Standardtiden för Long Press är 0,5 sekunder (500 ms) på båda plattformarna. iOS tillåter inställning av minimumPressDuration från 0.3 till 1.0 sekunder. Android använder en fast timeout på 500 ms för View.setOnLongClickListener. För användare med begränsad rörlighet rekommenderas att öka timeouten till 0,8–1,0 sekunder.
Long Press känns igen baserat på hålltid (0,5 s), 3D Touch — baserat på tryckkraft (gram tryck). 3D Touch är endast tillgängligt på iPhone 6S–XR (hårdvarutekniken Force Touch). Från och med iOS 13 ersatte Apple 3D Touch med Haptic Touch — en programvaruimitation som fungerar via Long Press med haptisk återkoppling. Haptic Touch finns på alla moderna iPhone och iPad.
Konflikten mellan Long Press och scrollning är ett vanligt problem. Lösning: ställ in delaysTouchesBegan = true för gestigenkännaren i iOS (systemet skickar inte touchesBegan omedelbart utan väntar på gestigenkänning). I Android, använd onInterceptTouchEvent som returnerar false för Long Press. Om användaren börjar röra fingret före timeout — avbryts gesten till förmån för scrollning.
Ja, Long Press stöds i webbappar via touchstart/touchend-händelsen med tidsmätning. Moderna webbläsare stöder också contextmenu-händelsen som utlöses vid lång tryckning på mobila enheter. För kompatibilitet mellan webbläsare, använd bibliotek som hammer.js eller implementera en anpassad igenkännare via setInterval i touchstart-handlern.
I iOS läggs haptisk återkoppling till via UIImpactFeedbackGenerator. Anropa impactOccurred() i det ögonblick då UILongPressGestureRecognizer övergår till tillståndet began. För en lätt respons, använd UIImpactFeedbackGenerator(style: .light). För en mer märkbar — .medium. För snabbmenyer lägger iOS automatiskt till haptisk återkoppling via UIContextMenuInteraction utan extra kod.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också