Long Press হল একটি লং প্রেস জেশ্চার যেখানে আঙুল একটি নির্দিষ্ট সময়ের জন্য (সাধারণত ০.৫–১ সেকেন্ড) নড়াচড়া না করে স্ক্রিনে থাকে। Tap-এর বিপরীতে, Long Press স্পর্শের মুহূর্তে নয়, বরং বিলম্ব টাইমার শেষ হওয়ার পরে শনাক্ত করা হয়। জেশ্চারটি প্রসঙ্গ মেনু আনা, বিষয়বস্তু প্রিভিউ, একাধিক অবজেক্ট নির্বাচন এবং অতিরিক্ত ক্রিয়া সক্রিয় করতে ব্যবহৃত হয়। এটি iOS-এ UILongPressGestureRecognizer-এর মাধ্যমে এবং Android-এ setOnLongClickListener বা GestureDetector-এর মাধ্যমে বাস্তবায়িত হয়।
মূল বিষয়
Long Press (দীর্ঘ চাপ, দীর্ঘ স্পর্শ) হল একটি মাল্টি-টাচ ইন্টারফেস জেশ্চার যেখানে ব্যবহারকারী স্ক্রিন স্পর্শ করে এবং একটি নির্দিষ্ট সময়ের জন্য আঙুল স্থির রাখে। সিস্টেম তাৎক্ষণিকভাবে প্রতিক্রিয়া জানায় না: এটি একটি টাইমআউটের (সাধারণত ৫০০ মি.সে.) জন্য অপেক্ষা করে এবং এটি শেষ হওয়ার পরেই জেশ্চারটিকে Long Press হিসেবে শনাক্ত করে। যদি আঙুল আগেই তুলে নেওয়া হয় — জেশ্চারটি সাধারণ Tap হিসেবে ব্যাখ্যা করা হয়।
জেশ্চারটি আধুনিক মোবাইল ইন্টারফেসের একটি মৌলিক বিল্ডিং ব্লক। Apple এটি অ্যাপে (Messages, Safari, Files) প্রসঙ্গ মেনু আনতে ব্যবহার করে। Google Android-এ টেক্সট নির্বাচন, হোম স্ক্রিনে আইকন পুনর্বিন্যাস এবং প্রসঙ্গ মেনু আনতে Long Press অন্তর্ভুক্ত করেছে। ওয়েব ইন্টারফেসে, লং প্রেস প্রায়শই মোবাইল ডিভাইসে ডান মাউস ক্লিকের অনুকরণ করে, যেখানে কোনও শারীরিক ডান বোতাম নেই।
ঐতিহাসিকভাবে, Long Press টাচ স্ক্রিনের জন্য প্রসঙ্গ মেনুর (ডান ক্লিক) বিকল্প হিসেবে আবির্ভূত হয়েছিল। প্রথম বাস্তবায়নগুলি রেজিস্টিভ স্ক্রিনযুক্ত ডিভাইসে (Palm, ২০০০-এর দশকের শুরুর দিকে Windows Mobile) দেখা গিয়েছিল, কিন্তু জেশ্চারটি শুধুমাত্র iPhone এবং Android-এর আগমনের সাথে মানকীকৃত হয়েছিল। উভয় প্ল্যাটফর্মের Human Interface Guidelines Long Press-কে একটি গৌণ ক্রিয়া হিসেবে বর্ণনা করে — Tap-এর প্রতিস্থাপন নয়, বরং কার্যকারিতার সম্প্রসারণ।
Long Press এবং Tap দুটি ভিন্ন জেশ্চার যার ভিন্ন ভিন্ন অর্থ রয়েছে। Tap হল একটি তাৎক্ষণিক চাপ: আঙুল স্ক্রিন স্পর্শ করে এবং ১০০–৩০০ মি.সে.-এর মধ্যে তুলে নেওয়া হয়। Tap সর্বদা একটি প্রধান ক্রিয়া: অ্যাপ খোলা, বোতাম চাপা, লিঙ্ক অনুসরণ করা। Long Press একটি গৌণ ক্রিয়া: প্রসঙ্গ মেনু খোলা, সম্পাদনা শুরু করা, অতিরিক্ত তথ্য দেখানো।
| প্যারামিটার | Tap | Long Press |
|---|---|---|
| ধরে রাখার সময় | ১০০–৩০০ মি.সে. | ৫০০–১০০০ মি.সে. |
| ক্রিয়ার ধরন | প্রধান (primary) | গৌণ (secondary) |
| উদাহরণ | লিঙ্ক খোলা, বোতাম চাপা | প্রসঙ্গ মেনু, সম্পাদনা |
| প্রতিক্রিয়া | দৃশ্যমান (হাইলাইট) | স্পর্শজনিত (হ্যাপটিক ফিডব্যাক) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
মূল নিয়ম: কখনোই Long Press-কে কোনো ক্রিয়া সম্পাদনের একমাত্র উপায় হিসেবে ব্যবহার করবেন না। ব্যবহারকারীরা আশা করে যে Tap প্রধান ক্রিয়া সম্পাদন করবে, এবং Long Press অতিরিক্ত অপশন খুলবে। এই নীতির লঙ্ঘন (উদাহরণস্বরূপ, একটি লিঙ্ক খুলতে লং প্রেস প্রয়োজন) নেতিবাচক ব্যবহারকারীর অভিজ্ঞতা এবং কম অ্যাক্সেসিবিলিটির দিকে নিয়ে যায়।
UILongPressGestureRecognizer হল লং প্রেস হ্যান্ডল করার জন্য iOS SDK-তে মানক জেশ্চার শনাক্তকারী। এটি UIGestureRecognizer থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং ন্যূনতম সময়কাল, আঙুলের অনুমোদিত নড়াচড়া এবং স্পর্শের সংখ্যার কনফিগারেশন সমর্থন করে। শনাক্তকারী টাইমার শেষ হওয়ার পরে UIGestureRecognizerStateBegan অবস্থায় যায়, তারপর আঙুল নড়াচড়া করলে UIGestureRecognizerStateChanged-এ এবং আঙুল তুললে UIGestureRecognizerStateEnded-এ যায়।
// ন্যূনতম সময়কাল কনফিগারেশন সহ UILongPressGestureRecognizer
class ContextMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(
target: self,
action: #selector(handleLongPress(_:))
)
// ন্যূনতম ধরে রাখার সময়: ০.৫ সেকেন্ড
longPressRecognizer.minimumPressDuration = 0.5
// আঙুলের অনুমোদিত নড়াচড়া: ১০ পয়েন্ট
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 — সক্রিয়করণের আগে সেকেন্ডে সময় (ডিফল্ট ০.৫, অ্যাক্সেসিবিলিটির জন্য ০.৬৫+ সুপারিশকৃত); allowableMovement — পয়েন্টে আঙুলের সর্বোচ্চ নড়াচড়া (ডিফল্ট ১০, বাড়ালে কাঁপা হাতে সাহায্য করে)। iOS মাল্টি-টাচ জেশ্চারের জন্য numberOfTouchesRequired সমর্থন করে (যেমন, দুই আঙুল দিয়ে লং প্রেস)। শনাক্তকারী UIContextMenuInteraction-এর সাথেও একীভূত হয় — যখন UIContextMenuConfiguration-এর মাধ্যমে UIView-এ একটি প্রসঙ্গ মেনু যোগ করা হয়, Long Press স্বয়ংক্রিয়ভাবে ম্যানুয়াল জেশ্চার বাস্তবায়ন ছাড়াই প্রসঙ্গ মেনু আহ্বান করে।
setOnLongClickListener Android SDK-তে View-এর একটি পদ্ধতি যা একটি লং প্রেস লিসনার সেট করে। যখন একজন ব্যবহারকারী একটি View ৫০০ মি.সে.-এর বেশি সময় ধরে ধরে রাখে, সিস্টেম onLongClick() কল করে। পদ্ধতিটি একটি বুলিয়ান রিটার্ন করে — true মানে ইভেন্ট হ্যান্ডল করা হয়েছে এবং আর প্রচার করা উচিত নয়, false মানে ইভেন্ট অন্যান্য লিসনার দ্বারা হ্যান্ডল করা যেতে পারে। আরও জটিল হ্যান্ডলিংয়ের জন্য (Long Press শুরু হওয়ার পর আঙুলের নড়াচড়া), OnGestureListener-এর সাথে GestureDetector ব্যবহার করা হয়।
// স্পর্শজনিত প্রতিক্রিয়া সহ 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 লঞ্চার অ্যাপ সরানো এবং উইজেট যোগ করার জন্য আইকনে লং প্রেস ব্যবহার করে।
টেক্সট নির্বাচন উভয় প্ল্যাটফর্মে Long Press-এর একটি ক্লাসিক উদাহরণ। iOS-এ, টেক্সটে লং প্রেস কার্সর অবস্থানের জন্য একটি ম্যাগনিফাইং গ্লাস সক্রিয় করে; একটি শব্দে — এটি মার্কার সহ নির্বাচন করে। Android-এ, লং প্রেস পুরো শব্দটি নির্বাচন করে এবং একটি অ্যাকশন বার (কপি, কাট, পেস্ট) দেখায়। উভয় প্ল্যাটফর্ম নির্বাচন প্রসারিত করতে পরবর্তী মার্কার ড্র্যাগিং ব্যবহার করে।
প্রিভিউ — iOS-এ, Safari-তে কোনো লিঙ্ক বা Mail-এ বার্তায় লং প্রেস বিষয়বস্তুর প্রিভিউ (peek) খোলে। Android-এ, অনুরূপ আচরণ একটি নোটিফিকেশনে Long Press-এর মাধ্যমে বাস্তবায়িত হয় (অ্যাকশন বাটন সহ নোটিফিকেশন প্রসারিত করে)। ফটো অ্যাপ দ্রুত ইমেজ প্রিভিউর জন্য থাম্বনেইলে লং প্রেস ব্যবহার করে।
ড্র্যাগ-এন্ড-ড্রপ প্রায়শই Long Press দ্বারা শুরু হয়। ব্যবহারকারী উপাদানটি ধরে রাখে, সিস্টেম ড্র্যাগ মোডে সুইচ করে এবং আঙুলের নড়াচড়া উপাদানটিকে স্ক্রিন জুড়ে সরায়। Android Long Press-এর পরে View.startDragAndDrop()-এর মাধ্যমে এই পরিস্থিতি সমর্থন করে। iOS UIDragInteraction ব্যবহার করে, যেখানে ড্র্যাগ ইন্টারঅ্যাকশনের জন্য ড্র্যাগিং শুরু করতে লং প্রেস প্রয়োজন।
উভয় প্ল্যাটফর্মের Human Interface Guidelines স্পষ্ট সুপারিশ দেয়: Long Press সর্বদা একটি গৌণ ক্রিয়া হওয়া উচিত। কখনোই লং প্রেসকে কোনো গুরুত্বপূর্ণ ফাংশন সম্পাদনের একমাত্র উপায় করবেন না। ব্যবহারকারীরা প্রথমে Tap চেষ্টা করে — যদি Tap প্রত্যাশিতভাবে কাজ না করে, তারা হতাশ হয়। ভিজুয়াল ইঙ্গিত যোগ করুন: প্রসঙ্গ মেনু তিন-বিন্দু আইকন দ্বারা নির্দেশিত হতে পারে, এবং Long Press সমর্থনকারী উপাদানগুলি স্পর্শে একটি ভিজুয়াল ইঙ্গিত দ্বারা নির্দেশিত হতে পারে।
স্পর্শজনিত প্রতিক্রিয়া (হ্যাপটিক ফিডব্যাক) Long Press-এর জন্য বাধ্যতামূলক। যখন জেশ্চার শনাক্ত করা হয়, ডিভাইসটির স্পর্শজনিত প্রতিক্রিয়া দিয়ে এটি নিশ্চিত করা উচিত: iOS-এ এটি হালকা আবেগ সহ UIImpactFeedbackGenerator, Android-এ — HapticFeedbackConstants.LONG_PRESS। স্পর্শজনিত প্রতিক্রিয়া ছাড়া, ব্যবহারকারী নিশ্চিত নয় যে জেশ্চার নিবন্ধিত হয়েছে এবং আবার চাপতে পারে, যা অবাঞ্ছিত ক্রিয়ার কারণ হতে পারে।
| সুপারিশ | iOS | Android |
|---|---|---|
| শনাক্তকরণ টাইমআউট | ০.৫–০.৬৫ সেকেন্ড | ৫০০ মি.সে. (ডিফল্ট) |
| স্পর্শজনিত প্রতিক্রিয়া | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| ভিজুয়াল ফিডব্যাক | প্রসঙ্গ মেনু, হাইলাইট | PopupMenu, রিপল অ্যানিমেশন |
| অ্যাক্সেসিবিলিটি | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| সর্বোচ্চ আঙুল নড়াচড়া | allowableMovement = ১০ pt | TouchSlop (~৮ dp ডিফল্ট) |
| স্ক্রলের সাথে দ্বন্দ্ব | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
অ্যাক্সেসিবিলিটি: সব ব্যবহারকারী লং প্রেস করতে পারে না (মোটর প্রতিবন্ধী ব্যক্তি, বয়স্ক ব্যবহারকারী)। সর্বদা Long Press ক্রিয়াগুলিতে অ্যাক্সেসের একটি বিকল্প উপায় প্রদান করুন — উদাহরণস্বরূপ, ইন্টারফেসে একটি "আরও" বাটনের মাধ্যমে বা সিস্টেম অ্যাক্সেসিবিলিটি বৈশিষ্ট্যের (iOS-এ VoiceOver, Android-এ TalkBack) মাধ্যমে। iOS-এর জন্য, আপনি UIAccessibilityCustomAction-এর মাধ্যমে Custom Actions যোগ করতে পারেন, যা VoiceOver রোটারের মাধ্যমে উপলব্ধ।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Long Press-এর জন্য মানক সময় উভয় প্ল্যাটফর্মে ০.৫ সেকেন্ড (৫০০ মি.সে.)। iOS minimumPressDuration ০.৩ থেকে ১.০ সেকেন্ড পর্যন্ত কনফিগার করার অনুমতি দেয়। Android View.setOnLongClickListener-এর জন্য ৫০০ মি.সে.-এর নির্দিষ্ট টাইমআউট ব্যবহার করে। সীমিত মোটর দক্ষতা সম্পন্ন ব্যবহারকারীদের জন্য, টাইমআউট ০.৮–১.০ সেকেন্ডে বাড়ানোর সুপারিশ করা হয়।
Long Press ধরে রাখার সময় (০.৫ সেকেন্ড) দ্বারা শনাক্ত হয়, 3D Touch — চাপের বল (গ্রামে) দ্বারা শনাক্ত হয়। 3D Touch শুধুমাত্র iPhone 6S–XR-এ উপলব্ধ (হার্ডওয়্যার Force Touch প্রযুক্তি)। iOS 13 থেকে শুরু করে, Apple 3D Touch-কে Haptic Touch দিয়ে প্রতিস্থাপন করেছে — একটি সফ্টওয়্যার সিমুলেশন যা স্পর্শজনিত প্রতিক্রিয়া সহ Long Press-এর মাধ্যমে কাজ করে। Haptic Touch সমস্ত আধুনিক iPhone এবং iPad-এ উপলব্ধ।
Long Press এবং স্ক্রলের মধ্যে দ্বন্দ্ব একটি সাধারণ সমস্যা। সমাধান: iOS-এ জেশ্চার শনাক্তকারীর জন্য delaysTouchesBegan = true সেট করুন (সিস্টেম তাৎক্ষণিকভাবে touchesBegan পাঠায় না, বরং জেশ্চার শনাক্তকরণের জন্য অপেক্ষা করে)। Android-এ, Long Press-এর জন্য false রিটার্ন করে এমন onInterceptTouchEvent ব্যবহার করুন। যদি ব্যবহারকারী টাইমআউটের আগে আঙুল নড়াচড়া শুরু করে — জেশ্চারটি স্ক্রলের পক্ষে বাতিল হয়ে যায়।
হ্যাঁ, Long Press ওয়েব অ্যাপ্লিকেশনে সমর্থিত সময় মাপার সাথে touchstart/touchend ইভেন্টের মাধ্যমে। আধুনিক ব্রাউজারগুলি contextmenu ইভেন্টও সমর্থন করে, যা মোবাইল ডিভাইসে লং প্রেসে সক্রিয় হয়। ক্রস-ব্রাউজার সামঞ্জস্যের জন্য, hammer.js-এর মতো লাইব্রেরি ব্যবহার করুন অথবা touchstart হ্যান্ডলারে setInterval-এর মাধ্যমে কাস্টম শনাক্তকারী বাস্তবায়ন করুন।
iOS-এ, স্পর্শজনিত প্রতিক্রিয়া UIImpactFeedbackGenerator-এর মাধ্যমে যোগ করা হয়। UILongPressGestureRecognizer began অবস্থায় ট্রানজিশনের মুহূর্তে impactOccurred() কল করুন। হালকা প্রতিক্রিয়ার জন্য, UIImpactFeedbackGenerator(style: .light) ব্যবহার করুন। আরও লক্ষণীয় প্রতিক্রিয়ার জন্য — .medium। প্রসঙ্গ মেনুর জন্য, iOS অতিরিক্ত কোড ছাড়াই UIContextMenuInteraction-এর মাধ্যমে স্বয়ংক্রিয়ভাবে স্পর্শজনিত প্রতিক্রিয়া যোগ করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন