Long Press — ce este, gestul de atingere lungă în aplicații

Autor: IT Sectr Publicat: 2026-02-27 Timp de citire: 8 min

Long Press — gestul de apăsare lungă, în care degetul este menținut pe ecran pentru o anumită perioadă de timp (de obicei 0,5–1 secundă) fără mișcare. Spre deosebire de Tap, Long Press este recunoscut nu în momentul atingerii, ci după expirarea timerului de întârziere. Gestul este folosit pentru a apela meniul contextual, previzualizarea, selectarea mai multor obiecte și activarea acțiunilor suplimentare. Este implementat pe iOS prin UILongPressGestureRecognizer, pe Android — prin setOnLongClickListener sau GestureDetector.

Principalele puncte

  • Întârziere — diferența principală între Long Press și Tap: necesită menținere 0,5–1 secundă
  • Meniul contextual — cea mai frecventă utilizare a Long Press: apelarea opțiunilor suplimentare pentru un element
  • UILongPressGestureRecognizer — clasa principală iOS pentru manipularea apăsării lungi cu callback-uri de stare
  • setOnLongClickListener — metoda Android View care apelează ascultătorul la apăsarea lungă
  • Multi-state — Long Press trece prin stările began, changed, ended, cancelled în iOS

Ce este Long Press?

Long Press (apăsare lungă, atingere lungă) — un gest al interfeței multi-touch, în care utilizatorul atinge ecranul și menține degetul nemișcat pentru un timp specificat. Sistemul nu reacționează instantaneu: așteaptă un timeout (de obicei 500 ms) și doar după expirarea acestuia recunoaște gestul ca Long Press. Dacă degetul este eliberat mai devreme — gestul este interpretat ca o atingere obișnuită Tap.

Gestul este un bloc de construcție fundamental al interfețelor mobile moderne. Apple îl folosește pentru apelarea meniurilor contextuale în aplicații (Messages, Safari, Files). Google a implementat Long Press în sistemul de selectare a textului, mutarea pictogramelor pe ecranul de start și apelarea meniurilor contextuale în Android. În interfețele web, apăsarea lungă emulează adesea clicul dreapta al mouse-ului pe dispozitivele mobile care nu au un buton fizic dreapta.

Istoric, Long Press a apărut ca o alternativă la meniul contextual (clic dreapta) pentru ecranele tactile. Primele implementări întâlnite în dispozitive cu ecrane rezistive (Palm, Windows Mobile de la începutul anilor 2000), dar gestul s-a standardizat doar odată cu apariția iPhone și Android. Human Interface Guidelines ale ambelor platforme descriu Long Press ca o acțiune secundară — nu o înlocuire a Tap, ci o extindere a funcționalității.

Cu ce se deosebește Long Press de Tap

Long Press și Tap — două gesturi diferite cu semantică diferită. Tap (atingerea) — este o apăsare instantanee: degetul atinge ecranul și este eliberat în 100–300 ms. Tap este întotdeauna acțiunea principală (primary action): deschiderea unei aplicații, apăsarea unui buton, navigarea la un link. Long Press — acțiunea secundară (secondary action): deschiderea meniului contextual, începerea editării, afișarea informațiilor suplimentare.

ParametruTapLong Press
Timp de menținere100–300 ms500–1000 ms
Tipul acțiuniiPrincipală (primary)Secundară (secondary)
ExempleDeschiderea linkului, apăsarea butonuluiMeniul contextual, editarea
FeedbackVizual (highlight)Haptic (Haptic Feedback)
iOS APIUITapGestureRecognizerUILongPressGestureRecognizer
Android APIsetOnClickListenersetOnLongClickListener

Regula cheie: nu folosiți niciodată Long Press ca unic mod de a executa o acțiune. Utilizatorii se așteaptă ca Tap să execute acțiunea principală, iar Long Press să deschidă opțiunile suplimentare. Încălcarea acestui principiu (de exemplu, cerința de apăsare lungă pentru a deschide un link) duce la o experiență negativă a utilizatorului și la reducerea accesibilității.

Long Press în iOS: UILongPressGestureRecognizer

UILongPressGestureRecognizer — recunoscătorul standard de gesturi în iOS SDK pentru manipularea apăsării lungi. Acesta moștenește de la UIGestureRecognizer și suportă configurarea duratei minime, a deplasării permise a degetului și a numărului de atingeri. Recunoscătorul trece în starea UIGestureRecognizerStateBegan după expirarea timerului, apoi în UIGestureRecognizerStateChanged la mișcarea degetului și UIGestureRecognizerStateEnded la eliberare.

swift
// UILongPressGestureRecognizer cu configurarea duratei minime
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(
            target: self,
            action: #selector(handleLongPress(_:))
        )

        // Timpul minim de menținere: 0.5 secunde
        longPressRecognizer.minimumPressDuration = 0.5

        // Deplasarea permisă a degetului: 10 puncte
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

    @objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
        guard recognizer.state == .began else { return }

        // Crearea meniului contextual
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

Parametrii de configurare: minimumPressDuration — timpul în secunde până la declanșare (standard 0.5, pentru accesibilitate se recomandă 0.65+); allowableMovement — deplasarea maximă a degetului în puncte (standard 10, mărirea ajută în caz de tremur). iOS suportă numberOfTouchesRequired pentru gesturi multi-touch (de exemplu, apăsarea lungă cu două degete). Recunoscătorul se integrează și cu UIContextMenuInteraction — atunci când se adaugă un meniu contextual la UIView prin UIContextMenuConfiguration, Long Press apelează automat meniul contextual fără implementarea manuală a gestului.

Long Press în Android: setOnLongClickListener

setOnLongClickListener — metoda View din Android SDK care setează un ascultător pentru apăsarea lungă. Când utilizatorul menține View mai mult de 500 ms, sistemul apelează onLongClick(). Metoda returnează un boolean — true înseamnă că evenimentul a fost gestionat și nu trebuie transmis mai departe, false — evenimentul poate fi gestionat și de alți ascultători. Pentru o gestionare mai complexă (mișcarea degetului după începerea Long Press) se folosește GestureDetector cu OnGestureListener.

kotlin
// Exemplu setOnLongClickListener cu feedback haptic
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // Răspuns haptic pentru confirmarea începerii gestului
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // Afișarea meniului contextual în poziția elementului
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // Eveniment gestionat
}

GestureDetector oferă un control mai fin asupra gestului. Spre deosebire de setOnLongClickListener, GestureDetector notifică despre începere (onLongPress), mișcare (onScroll) și eliberare. Acest lucru permite implementarea unor scenarii complexe — de exemplu, începerea tragerii după apăsarea lungă (Drag-and-Drop). OnGestureListener necesită implementarea a șase metode: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.

Unde se aplică apăsarea lungă

Long Press este utilizat în zeci de scenarii ale interfețelor mobile. Cea mai frecventă utilizare este meniul contextual: apăsarea lungă pe un contact arată opțiunile de comunicare (apel, mesaj, email), pe un fișier — opțiunile (copiere, mutare, ștergere), pe text — selectarea și clipboard-ul. Android Launcher folosește apăsarea lungă pe o pictogramă pentru mutarea aplicațiilor și adăugarea widget-urilor.

Selectarea textului — un exemplu clasic de Long Press pe ambele platforme. În iOS, apăsarea lungă pe text activează lupa pentru poziționarea cursorului; pe un cuvânt — îl selectează cu marcatori. În Android, apăsarea lungă selectează întregul cuvânt și arată panoul de acțiuni (copiere, tăiere, lipire). Ambele platforme folosesc apoi tragerea marcatorilor pentru a extinde selecția.

Previzualizarea — în iOS, apăsarea lungă pe un link în Safari sau pe un mesaj în Mail deschide previzualizarea conținutului (peek). În Android, un comportament similar este implementat prin Long Press pe o notificare (extinde notificarea cu butoane de acțiune). Aplicațiile Foto folosesc apăsarea lungă pe o miniatură pentru previzualizarea rapidă a imaginii.

Drag-and-Drop este adesea inițiat de Long Press. Utilizatorul menține elementul, sistemul comută în modul de tragere, iar mișcarea degetului deplasează elementul pe ecran. Android suportă acest scenariu prin View.startDragAndDrop() după Long Press. iOS folosește UIDragInteraction, unde interacțiunea de tragere necesită apăsare lungă pentru a începe tragerea.

Recomandări pentru utilizarea Long Press

Human Interface Guidelines ale ambelor platforme oferă recomandări clare: Long Press trebuie să fie întotdeauna o acțiune secundară. Nu faceți niciodată apăsarea lungă unicul mod de a executa o funcție critică. Utilizatorii încearcă mai întâi Tap — dacă Tap nu funcționează așa cum se așteaptă, ei devin dezamăgiți. Adăugați indicii vizuale: meniurile contextuale pot fi indicate printr-o pictogramă cu trei puncte, iar elementele care suportă Long Press — printr-un indiciu vizual la atingere.

Feedback-ul haptic este obligatoriu pentru Long Press. Când gestul este recunoscut, dispozitivul trebuie să confirme acest lucru printr-un răspuns haptic: în iOS este UIImpactFeedbackGenerator cu un impuls ușor, în Android — HapticFeedbackConstants.LONG_PRESS. Fără feedback haptic, utilizatorul nu este sigur că gestul a funcționat și poate apăsa din nou, provocând acțiuni nedorite.

RecomandareiOSAndroid
Timeout de recunoaștere0.5–0.65 secunde500 ms (implicit)
Feedback hapticUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
Feedback vizualMeniul contextual, evidențierePopupMenu, ripple animation
Accesibilitate (Accessibility)VoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
Deplasarea max. a degetuluiallowableMovement = 10 ptTouchSlop (standard ~8 dp)
Conflict cu derulareacancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

Accesibilitate: nu toți utilizatorii pot executa o apăsare lungă (persoane cu deficiențe motorii, utilizatori vârstnici). Oferiți întotdeauna o modalitate alternativă de acces la acțiunile Long Press — de exemplu, printr-un buton «Mai mult» în interfață sau prin funcțiile sistemice de accesibilitate (VoiceOver în iOS, TalkBack în Android). Pentru iOS, puteți adăuga Custom Actions în UIAccessibilityCustomAction, care sunt accesibile prin rotorul VoiceOver.

Întrebări frecvente

Care este timpul standard de menținere pentru Long Press?

Timpul standard pentru Long Press este de 0,5 secunde (500 ms) pe ambele platforme. iOS permite configurarea minimumPressDuration de la 0.3 la 1.0 secunde. Android folosește un timeout fix de 500 ms pentru View.setOnLongClickListener. Pentru utilizatorii cu mobilitate redusă, se recomandă creșterea timeout-ului la 0,8–1,0 secunde.

Care este diferența între Long Press și 3D Touch?

Long Press este recunoscut după timpul de menținere (0,5 s), 3D Touch — după forța de apăsare (grame de presiune). 3D Touch este disponibil doar pe iPhone 6S–XR (tehnologia hardware Force Touch). începând cu iOS 13, Apple a înlocuit 3D Touch cu Haptic Touch — o imitație software care funcționează prin Long Press cu feedback haptic. Haptic Touch este disponibil pe toate iPhone și iPad moderne.

Cum evit conflictul Long Press cu derularea (ScrollView)?

Conflictul Long Press și derularea este o problemă frecventă. Soluția: setați delaysTouchesBegan = true pentru recunoscătorul de gesturi în iOS (sistemul nu trimite touchesBegan imediat, ci așteaptă recunoașterea gestului). În Android, utilizați onInterceptTouchEvent care returnează false pentru Long Press. Dacă utilizatorul începe mișcarea degetului înainte de timeout — gestul este anulat în favoarea derulării.

Se poate folosi Long Press pentru aplicații web (PWA)?

Da, Long Press este suportat în aplicațiile web prin evenimentul touchstart/touchend cu măsurarea timpului. Browserele moderne suportă, de asemenea, evenimentul contextmenu, care se declanșează la apăsarea lungă pe dispozitivele mobile. Pentru compatibilitate cross-browser, utilizați biblioteci precum hammer.js sau implementați un recunoscător personalizat prin setInterval în handler-ul touchstart.

Cum adaug feedback haptic la Long Press pe iOS?

În iOS, feedback-ul haptic se adaugă prin UIImpactFeedbackGenerator. Apelați impactOccurred() în momentul trecerii UILongPressGestureRecognizer în starea began. Pentru un răspuns ușor, utilizați UIImpactFeedbackGenerator(style: .light). Pentru unul mai vizibil — .medium. Pentru meniurile contextuale, iOS adaugă automat feedback haptic prin UIContextMenuInteraction fără cod suplimentar.

Rezumat

  • Long Press — gest de menținere a degetului pe ecran timp de 0,5–1 secundă pentru a apela acțiuni secundare
  • Diferența de Tap — Tap se execută instantaneu (primary action), Long Press necesită timeout (secondary action)
  • iOS API — UILongPressGestureRecognizer cu parametrii minimumPressDuration și allowableMovement
  • Android API — View.setOnLongClickListener și GestureDetector.OnGestureListener
  • Utilizare — meniuri contextuale, selectarea textului, previzualizare, inițierea Drag-and-Drop
  • Feedback haptic — obligatoriu pentru confirmarea recunoașterii gestului utilizatorului
  • Accesibilitate — oferiți întotdeauna acces alternativ la acțiunile Long Press

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și