Long Press — คืออะไร ท่าทางการแตะค้างในแอปพลิเคชัน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-27 เวลาอ่าน: 8 นาที

Long Press คือท่าทางการกดค้างโดยให้นิ้วอยู่บนหน้าจอเป็นระยะเวลาหนึ่ง (ปกติ 0.5–1 วินาที) โดยไม่ขยับ แตกต่างจาก Tap ตรงที่ Long Press จะไม่ถูกจดจำในขณะที่แตะ แต่จะถูกจดจำหลังจากตัวจับเวลาหมดลง ท่าทางนี้ใช้สำหรับเรียกเมนูบริบท ดูตัวอย่างเนื้อหา เลือกหลายวัตถุ และเปิดใช้งานการดำเนินการเพิ่มเติม บน iOS ใช้งานผ่าน UILongPressGestureRecognizer และบน Android ใช้งานผ่าน setOnLongClickListener หรือ GestureDetector

ประเด็นสำคัญ

  • การหน่วงเวลา — ความแตกต่างหลักระหว่าง Long Press และ Tap: ต้องกดค้าง 0.5–1 วินาที
  • เมนูบริบท — การใช้งาน Long Press ที่พบบ่อยที่สุด: การเรียกตัวเลือกเพิ่มเติมสำหรับองค์ประกอบ
  • UILongPressGestureRecognizer — คลาสหลักของ iOS สำหรับจัดการการกดค้างพร้อม callback สถานะ
  • setOnLongClickListener — เมธอด View ของ Android ที่เรียกใช้ตัวฟังเมื่อกดค้าง
  • หลายสถานะ — Long Press ผ่านสถานะ began, changed, ended, cancelled ใน iOS

Long Press คืออะไร?

Long Press (การกดค้าง การแตะค้าง) คือท่าทางอินเทอร์เฟซแบบสัมผัสหลายจุดที่ผู้ใช้แตะหน้าจอและนิ่งไว้เป็นระยะเวลาที่กำหนด ระบบจะไม่ตอบสนองทันที: มันจะรอระยะเวลาหมดเวลา (ปกติ 500 มิลลิวินาที) และหลังจากหมดเวลาจึงจะจดจำท่าทางเป็น Long Press หากยกนิ้วก่อนหน้านั้น ท่าทางจะถูกตีความว่าเป็น Tap ทั่วไป

ท่าทางนี้เป็น ส่วนประกอบพื้นฐานของอินเทอร์เฟซมือถือสมัยใหม่ Apple ใช้มันเพื่อเรียกเมนูบริบทในแอปพลิเคชัน (Messages, Safari, Files) Google ได้รวม Long Press ไว้ในการเลือกข้อความ การจัดเรียงไอคอนใหม่บนหน้าจอหลัก และการเรียกเมนูบริบทใน Android ในอินเทอร์เฟซเว็บ การกดค้างมักจะเลียนแบบการคลิกขวาของเมาส์บนอุปกรณ์มือถือที่ไม่มีปุ่มขวาทางกายภาพ

ในอดีต Long Press เกิดขึ้นเพื่อเป็นทางเลือกแทนเมนูบริบท (คลิกขวา) สำหรับหน้าจอสัมผัส การใช้งานครั้งแรกปรากฏบนอุปกรณ์ที่มีหน้าจอแบบต้านทาน (Palm, Windows Mobile ช่วงต้นปี 2000) แต่ท่าทางนี้กลายเป็นมาตรฐานเมื่อมีการมาถึงของ iPhone และ Android คู่มืออินเทอร์เฟซมนุษย์ของทั้งสองแพลตฟอร์มอธิบาย Long Press ว่าเป็นการดำเนินการรอง — ไม่ใช่การแทนที่ Tap แต่เป็นการขยายฟังก์ชันการทำงาน

Long Press แตกต่างจาก Tap อย่างไร

Long Press และ Tap เป็นท่าทางที่แตกต่างกันสองแบบที่มีความหมายต่างกัน Tap คือการแตะทันที: นิ้วสัมผัสหน้าจอและยกขึ้นภายใน 100–300 มิลลิวินาที Tap เป็น การดำเนินการหลัก เสมอ: เปิดแอปพลิเคชัน กดปุ่ม ตามลิงก์ Long Press เป็น การดำเนินการรอง: เปิดเมนูบริบท เริ่มแก้ไข แสดงข้อมูลเพิ่มเติม

พารามิเตอร์TapLong Press
เวลากดค้าง100–300 มิลลิวินาที500–1000 มิลลิวินาที
ประเภทการดำเนินการหลัก (primary)รอง (secondary)
ตัวอย่างเปิดลิงก์ กดปุ่มเมนูบริบท การแก้ไข
การตอบสนองภาพ (ไฮไลต์)สัมผัส (การตอบสนองแบบสัมผัส)
iOS APIUITapGestureRecognizerUILongPressGestureRecognizer
Android APIsetOnClickListenersetOnLongClickListener

กฎสำคัญ: อย่าใช้ Long Press เป็นวิธีการเดียวในการดำเนินการ ผู้ใช้คาดหวังว่า Tap จะดำเนินการหลัก และ Long Press จะเปิดตัวเลือกเพิ่มเติม การละเมิดหลักการนี้ (เช่น ต้องกดค้างเพื่อเปิดลิงก์) นำไปสู่ประสบการณ์ผู้ใช้ที่แย่ลงและลดการเข้าถึง

Long Press ใน iOS: UILongPressGestureRecognizer

UILongPressGestureRecognizer คือตัวจดจำท่าทางมาตรฐานใน iOS SDK สำหรับจัดการการกดค้าง มันสืบทอดจาก UIGestureRecognizer และรองรับการกำหนดค่าระยะเวลาขั้นต่ำ การเคลื่อนไหวของนิ้วที่อนุญาต และจำนวนครั้งที่แตะ ตัวจดจำจะเปลี่ยนเป็นสถานะ UIGestureRecognizerStateBegan หลังจากตัวจับเวลาหมด จากนั้นเป็น UIGestureRecognizerStateChanged เมื่อนิ้วขยับ และ UIGestureRecognizerStateEnded เมื่อปล่อย

swift
// UILongPressGestureRecognizer พร้อมกำหนดค่าระยะเวลาขั้นต่ำ
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

        // เวลากดค้างขั้นต่ำ: 0.5 วินาที
        longPressRecognizer.minimumPressDuration = 0.5

        // การเคลื่อนไหวนิ้วที่อนุญาต: 10 จุด
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

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

        // การสร้างเมนูบริบท
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

พารามิเตอร์การกำหนดค่า: minimumPressDuration — เวลาเป็นวินาทีก่อนการทำงาน (ค่าเริ่มต้น 0.5 สำหรับการเข้าถึงแนะนำ 0.65+); allowableMovement — การเคลื่อนไหวสูงสุดของนิ้วเป็นจุด (ค่าเริ่มต้น 10 การเพิ่มขึ้นช่วยในกรณีมือสั่น) iOS รองรับ numberOfTouchesRequired สำหรับท่าทางแบบหลายสัมผัส (เช่น กดค้างด้วยสองนิ้ว) ตัวจดจำยังทำงานร่วมกับ UIContextMenuInteraction — เมื่อเพิ่มเมนูบริบทไปยัง UIView ผ่าน UIContextMenuConfiguration Long Press จะเรียกเมนูบริบทโดยอัตโนมัติโดยไม่ต้องใช้งานท่าทางด้วยตนเอง

Long Press ใน Android: setOnLongClickListener

setOnLongClickListener คือเมธอด View ใน Android SDK ที่ตั้งค่าตัวฟังการกดค้าง เมื่อผู้ใช้กด View ค้างไว้นานกว่า 500 มิลลิวินาที ระบบจะเรียก onLongClick() เมธอดส่งค่าบูลีนคืน — true หมายถึงเหตุการณ์ถูกจัดการแล้วและไม่ควรส่งต่อไป false หมายถึงเหตุการณ์สามารถถูกจัดการโดยตัวฟังอื่น สำหรับการจัดการที่ซับซ้อนมากขึ้น (การเคลื่อนไหวของนิ้วหลังจากเริ่ม Long Press) จะใช้ GestureDetector ร่วมกับ OnGestureListener

kotlin
// ตัวอย่าง setOnLongClickListener พร้อมการตอบสนองแบบสัมผัส
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // การตอบสนองแบบสัมผัสเพื่อยืนยันการเริ่มท่าทาง
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // แสดงเมนูบริบทที่ตำแหน่งขององค์ประกอบ
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // จัดการเหตุการณ์แล้ว
}

GestureDetector ให้การควบคุมท่าทางที่ละเอียดยิ่งขึ้น แตกต่างจาก setOnLongClickListener ตรงที่ GestureDetector แจ้งเตือนเกี่ยวกับการเริ่มต้น (onLongPress) การเคลื่อนไหว (onScroll) และการปล่อย ซึ่งช่วยให้สามารถทำสถานการณ์ที่ซับซ้อนได้ — เช่น เริ่มการลากหลังจากการกดค้าง (Drag-and-Drop) OnGestureListener ต้องมีการใช้งานหกเมธอด: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling

การกดค้างใช้ที่ไหนบ้าง

Long Press ใช้ในสถานการณ์อินเทอร์เฟซมือถือนับสิบ การใช้งานที่พบบ่อยที่สุดคือ เมนูบริบท: การกดค้างบนผู้ติดต่อจะแสดงตัวเลือกการสื่อสาร (โทร ข้อความ อีเมล) บนไฟล์ — ตัวเลือก (คัดลอก ย้าย ลบ) บนข้อความ — การเลือกและคลิปบอร์ด Android Launcher ใช้การกดค้างบนไอคอนเพื่อย้ายแอปพลิเคชันและเพิ่มวิดเจ็ต

การเลือกข้อความ เป็นตัวอย่างคลาสสิกของ Long Press บนทั้งสองแพลตฟอร์ม ใน iOS การกดค้างบนข้อความจะเปิดแว่นขยายเพื่อวางตำแหน่งเคอร์เซอร์ บนคำ — เลือกคำด้วยเครื่องหมาย ใน Android การกดค้างจะเลือกทั้งคำและแสดงแถบการดำเนินการ (คัดลอก ตัด วาง) ทั้งสองแพลตฟอร์มใช้การลากเครื่องหมายในภายหลังเพื่อขยายการเลือก

การแสดงตัวอย่าง — ใน iOS การกดค้างบนลิงก์ใน Safari หรือข้อความใน Mail จะเปิดตัวอย่างเนื้อหา (peek) ใน Android พฤติกรรมที่คล้ายกันถูกใช้งานผ่าน Long Press บนการแจ้งเตือน (ขยายการแจ้งเตือนพร้อมปุ่มดำเนินการ) แอปพลิเคชันรูปภาพใช้การกดค้างบนภาพขนาดย่อเพื่อดูตัวอย่างรูปภาพอย่างรวดเร็ว

ลากและวาง (Drag-and-Drop) มักเริ่มต้นด้วย Long Press ผู้ใช้กดองค์ประกอบค้างไว้ ระบบจะสลับไปยังโหมดลาก และการเคลื่อนไหวของนิ้วจะย้ายองค์ประกอบไปบนหน้าจอ Android รองรับสถานการณ์นี้ผ่าน View.startDragAndDrop() หลังจาก Long Press iOS ใช้ UIDragInteraction ซึ่งการโต้ตอบแบบลากต้องใช้การกดค้างเพื่อเริ่มลาก

คำแนะนำในการใช้ Long Press

คู่มืออินเทอร์เฟซมนุษย์ของทั้งสองแพลตฟอร์มให้คำแนะนำที่ชัดเจน: Long Press ควรเป็นการดำเนินการรองเสมอ อย่าทำให้การกดค้างเป็นวิธีเดียวในการดำเนินการที่สำคัญ ผู้ใช้จะลอง Tap ก่อน — ถ้า Tap ไม่ทำงานตามที่คาดหวัง พวกเขาจะผิดหวัง เพิ่มคำแนะนำภาพ: เมนูบริบทสามารถระบุด้วยไอคอนสามจุด และองค์ประกอบที่รองรับ Long Press — ด้วยคำแนะนำภาพเมื่อแตะ

การตอบสนองแบบสัมผัส เป็นสิ่งจำเป็นสำหรับ Long Press เมื่อจดจำท่าทางได้ อุปกรณ์ควรยืนยันด้วยการตอบสนองแบบสัมผัส: ใน iOS คือ UIImpactFeedbackGenerator พร้อมแรงกระตุ้นเบา ๆ ใน Android — HapticFeedbackConstants.LONG_PRESS หากไม่มีการตอบสนองแบบสัมผัส ผู้ใช้จะไม่แน่ใจว่าท่าทางได้ถูกลงทะเบียนและอาจกดอีกครั้ง ทำให้เกิดการดำเนินการที่ไม่พึงประสงค์

คำแนะนำiOSAndroid
ระยะเวลาหมดเวลาการจดจำ0.5–0.65 วินาที500 มิลลิวินาที (ค่าเริ่มต้น)
การตอบสนองแบบสัมผัสUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
การตอบสนองทางภาพเมนูบริบท การไฮไลต์PopupMenu, ภาพเคลื่อนไหว ripple
การเข้าถึงVoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
การเคลื่อนไหวนิ้วสูงสุดallowableMovement = 10 จุดTouchSlop (~8 dp ค่าเริ่มต้น)
ข้อขัดแย้งกับการเลื่อนcancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

การเข้าถึง: ไม่ใช่ผู้ใช้ทุกคนที่สามารถกดค้างได้ (ผู้ที่มีความบกพร่องทางการเคลื่อนไหว ผู้สูงอายุ) จัดเตรียมวิธีการอื่นในการเข้าถึงการดำเนินการ Long Press เสมอ — เช่น ผ่านปุ่ม "เพิ่มเติม" ในอินเทอร์เฟซ หรือผ่านคุณสมบัติการเข้าถึงของระบบ (VoiceOver ใน iOS, TalkBack ใน Android) สำหรับ iOS คุณสามารถเพิ่มการดำเนินการแบบกำหนดเองผ่าน UIAccessibilityCustomAction ซึ่งสามารถเข้าถึงได้ผ่านโรเตอร์ VoiceOver

คำถามที่พบบ่อย

เวลากดค้างมาตรฐานสำหรับ Long Press คือเท่าไร?

เวลามาตรฐานสำหรับ Long Press คือ 0.5 วินาที (500 มิลลิวินาที) บนทั้งสองแพลตฟอร์ม iOS อนุญาตให้กำหนดค่า minimumPressDuration ตั้งแต่ 0.3 ถึง 1.0 วินาที Android ใช้ระยะเวลาหมดเวลาคงที่ 500 มิลลิวินาทีสำหรับ View.setOnLongClickListener สำหรับผู้ใช้ที่มีทักษะการเคลื่อนไหวจำกัด แนะนำให้เพิ่มระยะเวลาหมดเวลาเป็น 0.8–1.0 วินาที

ความแตกต่างระหว่าง Long Press และ 3D Touch คืออะไร?

Long Press ถูกจดจำด้วยเวลากดค้าง (0.5 วินาที) 3D Touch — ด้วยแรงกด (กรัมของแรง) 3D Touch มีให้ใช้เฉพาะบน iPhone 6S–XR (เทคโนโลยี Force Touch ฮาร์ดแวร์) ตั้งแต่ iOS 13 เป็นต้นไป Apple ได้แทนที่ 3D Touch ด้วย Haptic Touch — การจำลองซอฟต์แวร์ที่ทำงานผ่าน Long Press พร้อมการตอบสนองแบบสัมผัส Haptic Touch มีให้ใช้บน iPhone และ iPad รุ่นใหม่ทั้งหมด

จะหลีกเลี่ยงข้อขัดแย้งระหว่าง Long Press กับการเลื่อน (ScrollView) ได้อย่างไร?

ข้อขัดแย้งระหว่าง Long Press และการเลื่อน เป็นปัญหาที่พบบ่อย วิธีแก้ไข: ตั้งค่า delaysTouchesBegan = true สำหรับตัวจดจำท่าทางใน iOS (ระบบจะไม่ส่ง touchesBegan ทันที แต่รอการจดจำท่าทาง) ใน Android ใช้ onInterceptTouchEvent ที่คืนค่า false สำหรับ Long Press หากผู้ใช้เริ่มขยับนิ้วก่อนระยะเวลาหมดเวลา ท่าทางจะถูกยกเลิกเพื่อให้เลื่อนต่อไป

สามารถใช้ Long Press ในเว็บแอปพลิเคชัน (PWA) ได้หรือไม่?

ได้ Long Press รองรับในเว็บแอปพลิเคชัน ผ่านเหตุการณ์ touchstart/touchend พร้อมการวัดเวลา เบราว์เซอร์สมัยใหม่ยังรองรับเหตุการณ์ contextmenu ซึ่งจะทำงานเมื่อกดค้างบนอุปกรณ์มือถือ สำหรับความเข้ากันได้ข้ามเบราว์เซอร์ ให้ใช้ไลบรารีเช่น hammer.js หรือใช้งานตัวจดจำแบบกำหนดเองผ่าน setInterval ในตัวจัดการ touchstart

จะเพิ่มการตอบสนองแบบสัมผัสสำหรับ Long Press บน iOS ได้อย่างไร?

ใน iOS การตอบสนองแบบสัมผัส ถูกเพิ่มผ่าน UIImpactFeedbackGenerator เรียก impactOccurred() ในขณะที่ UILongPressGestureRecognizer เปลี่ยนเป็นสถานะ began สำหรับการตอบสนองเบา ๆ ให้ใช้ UIImpactFeedbackGenerator(style: .light) สำหรับการตอบสนองที่ชัดเจนขึ้น — .medium สำหรับเมนูบริบท iOS จะเพิ่มการตอบสนองแบบสัมผัสโดยอัตโนมัติผ่าน UIContextMenuInteraction โดยไม่ต้องใช้โค้ดเพิ่มเติม

สรุป

  • Long Press — ท่าทางการกดนิ้วค้างบนหน้าจอเป็นเวลา 0.5–1 วินาทีเพื่อเรียกการดำเนินการรอง
  • ความแตกต่างจาก Tap — Tap ทำทันที (การดำเนินการหลัก), Long Press ต้องการระยะเวลาหมดเวลา (การดำเนินการรอง)
  • iOS API — UILongPressGestureRecognizer พร้อมพารามิเตอร์ minimumPressDuration และ allowableMovement
  • Android API — View.setOnLongClickListener และ GestureDetector.OnGestureListener
  • การใช้งาน — เมนูบริบท การเลือกข้อความ การแสดงตัวอย่าง การเริ่มลากและวาง
  • การตอบสนองแบบสัมผัส — จำเป็นเพื่อยืนยันการจดจำท่าทางให้ผู้ใช้ทราบ
  • การเข้าถึง — จัดเตรียมการเข้าถึงทางเลือกสำหรับการดำเนินการ Long Press เสมอ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม