Long Press — bu nima, ilovalarda uzoq teginish jesti

Muallif: IT Sectr Nashr etilgan: 2026-02-27 O'qish vaqti: 8 daq

Long Press — uzoq bosish jesti, bunda barmoq ekranda ma'lum vaqt (odatda 0,5–1 soniya) harakatlanmasdan ushlab turiladi. Tap-dan farqli o'laroq, Long Press teginish paytida emas, balki kechikish taymeri tugagandan so'ng tan olinadi. Jest kontekst menyusini chaqirish, oldindan ko'rish, bir nechta ob'ektlarni tanlash va qo'shimcha harakatlarni faollashtirish uchun ishlatiladi. iOS-da UILongPressGestureRecognizer, Android-da esa setOnLongClickListener yoki GestureDetector orqali amalga oshiriladi.

Asosiy fikrlar

  • Kechikish — Long Pressning Tap-dan asosiy farqi: 0,5–1 soniya ushlab turish talab qilinadi
  • Kontekst menyusi — Long Pressning eng keng tarqalgan qo'llanilishi: element uchun qo'shimcha variantlarni chaqirish
  • UILongPressGestureRecognizer — iOS-da uzoq bosishni holat callbacklari bilan boshqaradigan asosiy sinf
  • setOnLongClickListener — Android Viewning uzoq bosishda tinglovchini chaqiradigan metodi
  • Multi-state — Long Press iOS-da began, changed, ended, cancelled holatlaridan o'tadi

Long Press nima?

Long Press (uzoq bosish, uzoq teginish) — multitouch interfeysining jesti, bunda foydalanuvchi ekranga tegadi va barmog'ini ma'lum vaqt harakatsiz ushlab turadi. Tizim darhol reaksiya bermaydi: u taym-autni (odatda 500 ms) kutadi va faqat uning tugashidan keyin jestni Long Press sifatida taniydi. Agar barmoq ertaroq qo'yib yuborilsa — jest oddiy Tap sifatida talqin qilinadi.

Jest zamonaviy mobil interfeyslarning fundamental qurilish blokidir. Apple uni ilovalarda (Messages, Safari, Files) kontekst menyularini chaqirish uchun ishlatadi. Google Long Pressni matn tanlash tizimida, ish stolida ikonkalarni ko'chirishda va Android-da kontekst menyularini chaqirishda qo'llagan. Veb-interfeyslarda uzoq bosish ko'pincha jismoniy o'ng tugmasi bo'lmagan mobil qurilmalarda sichqonchaning o'ng bosishini taqlid qiladi.

Tarixan Long Press sensorli ekranlar uchun kontekst menyusiga (o'ng bosish) muqobil sifatida paydo bo'lgan. Birinchi tatbiqlar rezistiv ekranli qurilmalarda (Palm, 2000-yillarning boshida Windows Mobile) uchraydi, ammo jest faqat iPhone va Android paydo bo'lishi bilan standartlashgan. Har ikki platformaning Human Interface Guidelines qoidalari Long Pressni ikkinchi darajali harakat sifatida tasvirlaydi — Tapni almashtirish emas, balki funksionallikni kengaytirish.

Long Press Tap-dan qanday farq qiladi

Long Press va Tap — turli semantikaga ega ikki xil jestdir. Tap (teginish) — bu bir zumda bosish: barmoq ekranga tegadi va 100–300 ms ichida qo'yib yuboriladi. Tap har doim asosiy harakatdir (primary action): ilovani ochish, tugmani bosish, linkga o'tish. Long Press — ikkinchi darajali harakatdir (secondary action): kontekst menyusini ochish, tahrirni boshlash, qo'shimcha ma'lumotni ko'rsatish.

ParametrTapLong Press
Ushlab turish vaqti100–300 ms500–1000 ms
Harakat turiAsosiy (primary)Ikkinchi darajali (secondary)
MisollarLinkni ochish, tugmani bosishKontekst menyusi, tahrirlash
Qayta aloqaVizual (highlight)Haptik (Haptic Feedback)
iOS APIUITapGestureRecognizerUILongPressGestureRecognizer
Android APIsetOnClickListenersetOnLongClickListener

Asosiy qoida: hech qachon Long Pressni harakatni bajarishning yagona usuli sifatida ishlatmang. Foydalanuvchilar Tap asosiy harakatni bajarishini, Long Press esa qo'shimcha variantlarni ochishini kutadilar. Bu printsipning buzilishi (masalan, linkni ochish uchun uzoq bosish talab qilish) salbiy foydalanuvchi tajribasiga va mavjudlikning pasayishiga olib keladi.

iOS-da Long Press: UILongPressGestureRecognizer

UILongPressGestureRecognizer — iOS SDK-da uzoq bosishni boshqarish uchun standart jest taniyuvchisi. U UIGestureRecognizer-dan meros oladi va minimal davomiylik, barmoqning ruxsat etilgan siljishi va teginishlar sonini konfiguratsiya qilishni qo'llab-quvvatlaydi. Taniyuvchi taymer tugagandan so'ng UIGestureRecognizerStateBegan holatiga, barmoq harakatlanganda UIGestureRecognizerStateChanged-ga va qo'yib yuborilganda UIGestureRecognizerStateEnded-ga o'tadi.

swift
// UILongPressGestureRecognizer minimal davomiylik sozlamalari bilan
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

        // Minimal ushlab turish vaqti: 0.5 soniya
        longPressRecognizer.minimumPressDuration = 0.5

        // Barmoqning ruxsat etilgan siljishi: 10 nuqta
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

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

        // Kontekst menyusini yaratish
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

Konfiguratsiya parametrlari: minimumPressDuration — ishga tushishgacha bo'lgan soniyalardagi vaqt (standart 0.5, mavjudlik uchun 0.65+ tavsiya etiladi); allowableMovement — barmoqning nuqtalardagi maksimal siljishi (standart 10, oshirish qo'l titrashida yordam beradi). iOS multitouch jestlari uchun numberOfTouchesRequired-ni qo'llab-quvvatlaydi (masalan, ikki barmoq bilan uzoq bosish). Taniyuvchi shuningdek UIContextMenuInteraction bilan integratsiyalanadi — UIView-ga UIContextMenuConfiguration orqali context menu qo'shilganda, Long Press jestni qo'lda amalga oshirishsiz avtomatik kontekst menyusini chaqiradi.

Android-da Long Press: setOnLongClickListener

setOnLongClickListener — Android SDK-da Viewning uzoq bosish tinglovchisini o'rnatadigan metodi. Foydalanuvchi Viewni 500 ms dan ortiq ushlab turganda, tizim onLongClick()-ni chaqiradi. Metod boolean qaytaradi — true hodisa ishlanganligini va boshqa joyga uzatilmasligi kerakligini, false esa hodisa boshqa tinglovchilar tomonidan ham ishlanishi mumkinligini bildiradi. Murakkabroq boshqarish uchun (Long Press boshlangandan keyin barmoq harakati) OnGestureListener bilan GestureDetector ishlatiladi.

kotlin
// Haptik qayta aloqa bilan setOnLongClickListener namunasi
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // Jest boshlanishini tasdiqlash uchun haptik javob
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // Element joylashuvida kontekst menyusini ko'rsatish
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // Hodisa ishlandi
}

GestureDetector jest ustida aniqroq nazoratni ta'minlaydi. setOnLongClickListener-dan farqli o'laroq, GestureDetector boshlanish (onLongPress), harakat (onScroll) va qo'yib yuborish haqida xabar beradi. Bu murakkab stsenariylarni amalga oshirishga imkon beradi — masalan, uzoq bosishdan keyin sudrab boshlash (Drag-and-Drop). OnGestureListener olti metodni amalga oshirishni talab qiladi: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.

Uzoq bosish qayerda qo'llaniladi

Long Press mobil interfeyslarning o'nlab stsenariylarida ishlatiladi. Eng keng tarqalgan qo'llanilish kontekst menyusidir: kontaktda uzoq bosish aloqa variantlarini (qo'ng'iroq, xabar, elektron pochta), faylda — variantlarni (nusxalash, ko'chirish, o'chirish), matnda — tanlash va buferni ko'rsatadi. Android Launcher ikonkada uzoq bosishni ilovalarni ko'chirish va vidjetlar qo'shish uchun ishlatadi.

Matn tanlash — har ikki platformada Long Pressning klassik namunasidir. iOS-da matnda uzoq bosish kursorni joylashtirish uchun lupani faollashtiradi; so'zda — uni markerlar bilan tanlaydi. Android-da uzoq bosish butun so'zni tanlaydi va harakatlar panelini (nusxalash, kesish, joylashtirish) ko'rsatadi. Har ikki platforma tanlovni kengaytirish uchun markerlarni sudrashdan foydalanadi.

Oldindan ko'rish — iOS-da Safari-dagi linkda yoki Mail-dagi xabarda uzoq bosish tarkibning oldindan ko'rinishini ochadi (peek). Android-da o'xshash xatti-harakat bildirishnomadagi Long Press orqali amalga oshiriladi (bildirishnomani harakat tugmalari bilan kengaytiradi). Photos ilovalari rasmni tez oldindan ko'rish uchun miniatyurada uzoq bosishdan foydalanadi.

Drag-and-Drop ko'pincha Long Press bilan boshlanadi. Foydalanuvchi elementni ushlab turadi, tizim sudrash rejimiga o'tadi va barmoq harakati elementni ekran bo'ylab harakatlantiradi. Android bu stsenariyni Long Pressdan so'ng View.startDragAndDrop() orqali qo'llab-quvvatlaydi. iOS UIDragInteraction dan foydalanadi, bunda drag interaction sudrashni boshlash uchun uzoq bosishni talab qiladi.

Long Press dan foydalanish bo'yicha tavsiyalar

Human Interface Guidelines har ikki platformada aniq tavsiyalar beradi: Long Press har doim ikkinchi darajali harakat bo'lishi kerak. Hech qachon uzoq bosishni muhim funksiyani bajarishning yagona usuliga aylantirmang. Foydalanuvchilar avval Tapni sinab ko'rishadi — agar Tap kutilganidek ishlamasa, ular hafsalasi pir bo'ladi. Vizual ko'rsatmalar qo'shing: kontekst menyulari uch nuqta belgisi bilan ko'rsatilishi mumkin, Long Pressni qo'llab-quvvatlovchi elementlar esa teginish paytida vizual ishora bilan.

Haptik qayta aloqa Long Press uchun majburiydir. Jest tanilganda, qurilma buni haptik javob bilan tasdiqlashi kerak: iOS-da bu UIImpactFeedbackGenerator engil impuls bilan, Android-da — HapticFeedbackConstants.LONG_PRESS. Haptik qayta aloqasiz foydalanuvchi jest ishlaganiga ishonch hosil qilmaydi va qayta bosishi mumkin, bu istalmagan harakatlarga olib keladi.

TavsiyaiOSAndroid
Tanib olish taym-auti0.5–0.65 soniya500 ms (standart)
Haptik qayta aloqaUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
Vizual feedbackKontekst menyusi, ajratib ko'rsatishPopupMenu, ripple animatsiyasi
Mavjudlik (Accessibility)VoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
Maks. barmoq siljishiallowableMovement = 10 ptTouchSlop (standart ~8 dp)
Aylantirish bilan ziddiyatcancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

Mavjudlik: barcha foydalanuvchilar uzoq bosishni bajara olmaydi (harakat buzilishi bo'lgan shaxslar, keksa foydalanuvchilar). Har doim Long Press harakatlariga muqobil kirishni ta'minlang — masalan, interfeysdagi «Ko'proq» tugmasi yoki tizimning mavjudlik funksiyalari (iOS-da VoiceOver, Android-da TalkBack) orqali. iOS uchun UIAccessibilityCustomAction-da VoiceOver rotori orqali mavjud bo'lgan Custom Actions qo'shilishi mumkin.

Tez-tez so'raladigan savollar

Long Press uchun standart ushlab turish vaqti qancha?

Long Press uchun standart vaqt har ikki platformada 0,5 soniya (500 ms) ni tashkil qiladi. iOS minimumPressDuration-ni 0.3 dan 1.0 soniyagacha sozlash imkonini beradi. Android View.setOnLongClickListener uchun qat'iy 500 ms taym-autdan foydalanadi. Harakat cheklovi bo'lgan foydalanuvchilar uchun taym-autni 0,8–1,0 soniyagacha oshirish tavsiya etiladi.

Long Press va 3D Touch o'rtasidagi farq nima?

Long Press ushlab turish vaqti (0,5 s) bo'yicha taniladi, 3D Touch — bosish kuchi (gramm bosim) bo'yicha. 3D Touch faqat iPhone 6S–XR da mavjud (apparat Force Touch texnologiyasi). iOS 13 dan boshlab Apple 3D Touch ni Haptic Touch bilan almashtirdi — haptik qayta aloqa bilan Long Press orqali ishlaydigan dasturiy taqlid. Haptic Touch barcha zamonaviy iPhone va iPad qurilmalarida mavjud.

Long Pressning aylantirish (ScrollView) bilan ziddiyatidan qanday qochish mumkin?

Long Press va aylantirish ziddiyati tez-tez uchraydigan muammodir. Yechim: iOS-da jest taniyuvchisi uchun delaysTouchesBegan = true ni o'rnating (tizim touchesBegan-ni darhol yubormaydi, jestning tan olinishini kutadi). Android-da Long Press uchun false qaytaradigan onInterceptTouchEvent dan foydalaning. Agar foydalanuvchi taym-autdan oldin barmog'ini harakatlantira boshlasa — jest aylantirish foydasiga bekor qilinadi.

Long Press veb-ilovalarda (PWA) ishlatilishi mumkinmi?

Ha, Long Press veb-ilovalarda qo'llab-quvvatlanadi vaqtni o'lchash bilan touchstart/touchend hodisalari orqali. Zamonaviy brauzerlar, shuningdek, mobil qurilmalarda uzoq bosishda ishga tushadigan contextmenu hodisasini ham qo'llab-quvvatlaydi. O'zaro brauzer mosligi uchun hammer.js kabi kutubxonalardan foydalaning yoki touchstart handlerida setInterval orqali maxsus taniyuvchini amalga oshiring.

iOS-da Long Press paytida haptik qayta aloqani qanday qo'shish mumkin?

iOS-da haptik qayta aloqa UIImpactFeedbackGenerator orqali qo'shiladi. UILongPressGestureRecognizer began holatiga o'tgan paytda impactOccurred()-ni chaqiring. Engil javob uchun UIImpactFeedbackGenerator(style: .light) dan foydalaning. Ko'proq seziladigan uchun — .medium. Kontekst menyulari uchun iOS qo'shimcha kodsiz UIContextMenuInteraction orqali avtomatik haptik qayta aloqa qo'shadi.

Xulosa

  • Long Press — ikkinchi darajali harakatlarni chaqirish uchun barmoqni ekranda 0,5–1 soniya ushlab turish jesti
  • Tap-dan farqi — Tap darhol bajariladi (primary action), Long Press taym-aut talab qiladi (secondary action)
  • iOS API — UILongPressGestureRecognizer minimumPressDuration va allowableMovement parametrlari bilan
  • Android API — View.setOnLongClickListener va GestureDetector.OnGestureListener
  • Qo'llanilishi — kontekst menyulari, matn tanlash, oldindan ko'rish, Drag-and-Dropni boshlash
  • Haptik qayta aloqa — jestning tan olinishini foydalanuvchiga tasdiqlash uchun majburiy
  • Mavjudlik — har doim Long Press harakatlariga muqobil kirishni ta'minlang

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing