Long Press — cos'è, il gesto del tocco prolungato nelle app

Autore: IT Sectr Pubblicato: 2026-02-27 Tempo di lettura: 8 min

Long Press è un gesto di pressione lunga in cui il dito rimane sullo schermo per un determinato periodo di tempo (di solito 0,5–1 secondo) senza muoversi. A differenza di Tap, Long Press non viene riconosciuto al momento del tocco, ma dopo la scadenza del timer di ritardo. Il gesto viene utilizzato per richiamare un menu contestuale, visualizzare in anteprima il contenuto, selezionare più oggetti e attivare azioni aggiuntive. Viene implementato su iOS tramite UILongPressGestureRecognizer, e su Android tramite setOnLongClickListener o GestureDetector.

Punti chiave

  • Ritardo — la principale differenza tra Long Press e Tap: richiede di tenere premuto per 0,5–1 secondo
  • Menu contestuale — l'uso più comune di Long Press: richiamare opzioni aggiuntive per un elemento
  • UILongPressGestureRecognizer — la classe principale di iOS per gestire la pressione lunga con callback di stato
  • setOnLongClickListener — il metodo View di Android che attiva un listener alla pressione lunga
  • Multi-stato — Long Press passa attraverso gli stati began, changed, ended, cancelled in iOS

Cos'è Long Press?

Long Press (pressione lunga, tocco prolungato) è un gesto dell'interfaccia multi-touch in cui l'utente tocca lo schermo e mantiene il dito immobile per un tempo determinato. Il sistema non reagisce istantaneamente: attende un timeout (di solito 500 ms) e solo dopo la sua scadenza riconosce il gesto come Long Press. Se il dito viene sollevato prima, il gesto viene interpretato come un normale Tap.

Il gesto è un elemento fondamentale delle interfacce mobili moderne. Apple lo utilizza per richiamare menu contestuali nelle app (Messages, Safari, Files). Google ha integrato Long Press nella selezione del testo, nella riorganizzazione delle icone sulla schermata iniziale e nel richiamo dei menu contestuali in Android. Nelle interfacce web, la pressione lunga spesso emula il clic destro del mouse sui dispositivi mobili, dove non è presente un pulsante fisico destro.

Storicamente, Long Press è nato come alternativa al menu contestuale (clic destro) per i touch screen. Le prime implementazioni sono apparse su dispositivi con schermi resistivi (Palm, Windows Mobile all'inizio degli anni 2000), ma il gesto si è standardizzato solo con l'avvento di iPhone e Android. Le linee guida dell'interfaccia umana di entrambe le piattaforme descrivono Long Press come un'azione secondaria — non una sostituzione di Tap, ma un'estensione della funzionalità.

Come Long Press si differenzia da Tap

Long Press e Tap sono due gesti diversi con semantica diversa. Tap è un tocco istantaneo: il dito tocca lo schermo e si solleva in 100–300 ms. Tap è sempre un'azione primaria: aprire un'app, premere un pulsante, seguire un link. Long Press è un'azione secondaria: aprire un menu contestuale, iniziare la modifica, mostrare informazioni aggiuntive.

ParametroTapLong Press
Tempo di pressione100–300 ms500–1000 ms
Tipo di azionePrimaria (primary)Secondaria (secondary)
EsempiAprire link, premere pulsanteMenu contestuale, modifica
FeedbackVisivo (evidenziazione)Tattile (Feedback Aptico)
API iOSUITapGestureRecognizerUILongPressGestureRecognizer
API AndroidsetOnClickListenersetOnLongClickListener

Regola chiave: non utilizzare mai Long Press come unico modo per eseguire un'azione. Gli utenti si aspettano che Tap esegua l'azione principale e che Long Press apra opzioni aggiuntive. Violare questo principio (ad esempio, richiedere una pressione lunga per aprire un link) porta a un'esperienza utente negativa e a una ridotta accessibilità.

Long Press su iOS: UILongPressGestureRecognizer

UILongPressGestureRecognizer è il riconoscitore di gesti standard nell'SDK iOS per gestire la pressione lunga. Eredita da UIGestureRecognizer e supporta la configurazione della durata minima, del movimento consentito del dito e del numero di tocchi. Il riconoscitore passa allo stato UIGestureRecognizerStateBegan dopo la scadenza del timer, quindi a UIGestureRecognizerStateChanged quando il dito si muove e UIGestureRecognizerStateEnded al rilascio.

swift
// UILongPressGestureRecognizer con configurazione della durata minima
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

        // Tempo minimo di pressione: 0.5 secondi
        longPressRecognizer.minimumPressDuration = 0.5

        // Movimento consentito del dito: 10 punti
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

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

        // Creazione di un menu contestuale
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

Parametri di configurazione: minimumPressDuration — tempo in secondi prima dell'attivazione (default 0.5, per l'accessibilità si consiglia 0.65+); allowableMovement — movimento massimo del dito in punti (default 10, l'aumento aiuta con mani tremanti). iOS supporta numberOfTouchesRequired per gesti multi-touch (ad esempio, pressione lunga con due dita). Il riconoscitore si integra anche con UIContextMenuInteraction — quando un menu contestuale viene aggiunto a una UIView tramite UIContextMenuConfiguration, Long Press richiama automaticamente il menu contestuale senza implementazione manuale del gesto.

Long Press su Android: setOnLongClickListener

setOnLongClickListener è un metodo View nell'SDK Android che imposta un listener di pressione lunga. Quando un utente tiene premuta una View per più di 500 ms, il sistema chiama onLongClick(). Il metodo restituisce un booleano — true significa che l'evento è stato gestito e non deve propagarsi oltre, false significa che l'evento può essere gestito da altri listener. Per una gestione più complessa (movimento del dito dopo l'inizio di Long Press), viene utilizzato GestureDetector con OnGestureListener.

kotlin
// Esempio di setOnLongClickListener con feedback aptico
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // Risposta aptica per confermare l'inizio del gesto
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // Mostrare il menu contestuale nella posizione dell'elemento
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // Evento gestito
}

GestureDetector fornisce un controllo più preciso sul gesto. A differenza di setOnLongClickListener, GestureDetector notifica l'inizio (onLongPress), il movimento (onScroll) e il rilascio. Ciò consente scenari complessi — ad esempio, avviare un trascinamento dopo una pressione lunga (Drag-and-Drop). OnGestureListener richiede l'implementazione di sei metodi: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.

Dove viene utilizzata la pressione lunga

Long Press viene utilizzato in decine di scenari di interfacce mobili. L'applicazione più comune è il menu contestuale: la pressione lunga su un contatto mostra le opzioni di comunicazione (chiamata, messaggio, email), su un file — opzioni (copia, sposta, elimina), sul testo — selezione e appunti. Il launcher Android utilizza la pressione lunga su un'icona per spostare le app e aggiungere widget.

Selezione del testo è un esempio classico di Long Press su entrambe le piattaforme. Su iOS, la pressione lunga sul testo attiva una lente d'ingrandimento per posizionare il cursore; su una parola — la seleziona con i marcatori. Su Android, la pressione lunga seleziona l'intera parola e mostra una barra delle azioni (copia, taglia, incolla). Entrambe le piattaforme utilizzano il successivo trascinamento dei marcatori per espandere la selezione.

Anteprima — su iOS, la pressione lunga su un link in Safari o un messaggio in Mail apre un'anteprima del contenuto (peek). Su Android, un comportamento simile viene implementato tramite Long Press su una notifica (espande la notifica con pulsanti di azione). Le app Foto utilizzano la pressione lunga su una miniatura per un'anteprima rapida dell'immagine.

Drag-and-Drop è spesso avviato da Long Press. L'utente tiene premuto l'elemento, il sistema passa alla modalità di trascinamento e il movimento del dito sposta l'elemento sullo schermo. Android supporta questo scenario tramite View.startDragAndDrop() dopo Long Press. iOS utilizza UIDragInteraction, dove l'interazione di trascinamento richiede una pressione lunga per iniziare il trascinamento.

Raccomandazioni per l'uso di Long Press

Le linee guida dell'interfaccia umana di entrambe le piattaforme forniscono raccomandazioni chiare: Long Press dovrebbe essere sempre un'azione secondaria. Non rendere mai la pressione lunga l'unico modo per eseguire una funzione critica. Gli utenti provano prima Tap — se Tap non funziona come previsto, si frustrano. Aggiungi suggerimenti visivi: i menu contestuali possono essere indicati da un'icona a tre punti e gli elementi che supportano Long Press — da un suggerimento visivo al tocco.

Il feedback aptico è obbligatorio per Long Press. Quando il gesto viene riconosciuto, il dispositivo deve confermarlo con una risposta aptica: su iOS è UIImpactFeedbackGenerator con un impulso leggero, su Android — HapticFeedbackConstants.LONG_PRESS. Senza feedback aptico, l'utente non è sicuro che il gesto sia stato registrato e potrebbe premere di nuovo, causando azioni indesiderate.

RaccomandazioneiOSAndroid
Timeout di riconoscimento0.5–0.65 secondi500 ms (default)
Feedback apticoUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
Feedback visivoMenu contestuale, evidenziazionePopupMenu, animazione ripple
AccessibilitàVoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
Movimento massimo del ditoallowableMovement = 10 ptTouchSlop (~8 dp default)
Conflitto con lo scorrimentocancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

Accessibilità: non tutti gli utenti possono eseguire una pressione lunga (persone con disabilità motorie, utenti anziani). Fornisci sempre un modo alternativo per accedere alle azioni Long Press — ad esempio, tramite un pulsante "Altro" nell'interfaccia o tramite le funzioni di accessibilità del sistema (VoiceOver su iOS, TalkBack su Android). Per iOS, puoi aggiungere Azioni personalizzate tramite UIAccessibilityCustomAction, disponibili tramite il rotore VoiceOver.

Domande frequenti

Qual è il tempo di pressione standard per Long Press?

Il tempo standard per Long Press è di 0,5 secondi (500 ms) su entrambe le piattaforme. iOS consente di configurare minimumPressDuration da 0.3 a 1.0 secondi. Android utilizza un timeout fisso di 500 ms per View.setOnLongClickListener. Per gli utenti con capacità motorie limitate, si consiglia di aumentare il timeout a 0,8–1,0 secondi.

Qual è la differenza tra Long Press e 3D Touch?

Long Press viene riconosciuto dal tempo di pressione (0,5 s), 3D Touch — dalla forza di pressione (grammi di forza). 3D Touch è disponibile solo su iPhone 6S–XR (tecnologia hardware Force Touch). A partire da iOS 13, Apple ha sostituito 3D Touch con Haptic Touch — una simulazione software che funziona tramite Long Press con feedback aptico. Haptic Touch è disponibile su tutti gli iPhone e iPad moderni.

Come evitare il conflitto tra Long Press e lo scorrimento (ScrollView)?

Il conflitto tra Long Press e lo scorrimento è un problema comune. Soluzione: imposta delaysTouchesBegan = true per il riconoscitore di gesti su iOS (il sistema non invia touchesBegan immediatamente, ma attende il riconoscimento del gesto). Su Android, utilizza onInterceptTouchEvent restituendo false per Long Press. Se l'utente inizia a muovere il dito prima del timeout, il gesto viene annullato a favore dello scorrimento.

Si può utilizzare Long Press nelle applicazioni web (PWA)?

Sì, Long Press è supportato nelle applicazioni web tramite l'evento touchstart/touchend con misurazione del tempo. I browser moderni supportano anche l'evento contextmenu, che si attiva con la pressione lunga sui dispositivi mobili. Per la compatibilità tra browser, utilizza librerie come hammer.js o implementa un riconoscitore personalizzato tramite setInterval nel gestore touchstart.

Come aggiungere feedback aptico per Long Press su iOS?

Su iOS, il feedback aptico viene aggiunto tramite UIImpactFeedbackGenerator. Chiama impactOccurred() nel momento in cui UILongPressGestureRecognizer passa allo stato began. Per una risposta leggera, utilizza UIImpactFeedbackGenerator(style: .light). Per una più marcata — .medium. Per i menu contestuali, iOS aggiunge automaticamente il feedback aptico tramite UIContextMenuInteraction senza codice aggiuntivo.

Riepilogo

  • Long Press — gesto di tenere il dito sullo schermo per 0,5–1 secondo per richiamare azioni secondarie
  • Differenza da Tap — Tap è istantaneo (azione primaria), Long Press richiede timeout (azione secondaria)
  • API iOS — UILongPressGestureRecognizer con parametri minimumPressDuration e allowableMovement
  • API Android — View.setOnLongClickListener e GestureDetector.OnGestureListener
  • Usi — menu contestuali, selezione testo, anteprima, avvio di Drag-and-Drop
  • Feedback aptico — obbligatorio per confermare all'utente il riconoscimento del gesto
  • Accessibilità — fornisci sempre un accesso alternativo alle azioni Long Press

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche