Accessibility (a11y) — প্রতিবন্ধী ব্যক্তিদের জন্য মোবাইল অ্যাপ্লিকেশন ব্যবহারযোগ্য করে তোলা। এর মধ্যে রয়েছে স্ক্রিন রিডার (iOS-এ VoiceOver, Android-এ TalkBack), টেক্সট স্কেলিং (Dynamic Type), পর্যাপ্ত রঙের কনট্রাস্ট (WCAG 2.1 স্তর AA), দৃষ্টি ছাড়া নেভিগেশন এবং অঙ্গভঙ্গির বিকল্প। WHO (2023) অনুসারে, 1.3 বিলিয়নেরও বেশি মানুষ (জনসংখ্যার 16%) কোনো না কোনো প্রতিবন্ধিতা নিয়ে বাস করে — অ্যাক্সেসিবিলিটি কোনো বিকল্প নয়, এটি একটি প্রয়োজনীয়তা। আরও জানতে Apple-এর অফিসিয়াল অ্যাক্সেসিবিলিটি ডকুমেন্টেশন দেখুন।
মূল বিষয়
Accessibility (সংক্ষেপে a11y — «a» এবং «y»-এর মধ্যে 11টি অক্ষর) — দৃষ্টি, শ্রবণ, মোটর এবং জ্ঞানীয় প্রতিবন্ধী ব্যক্তিদের দ্বারা ব্যবহারযোগ্য অ্যাপ্লিকেশন বিকাশের অনুশীলন। মোবাইল ডেভেলপমেন্টে, অ্যাক্সেসিবিলিটি চারটি প্রধান পরিস্থিতি কভার করে: অন্ধ ব্যবহারকারী (স্ক্রিন রিডার), কম দৃষ্টি সম্পন্ন ব্যবহারকারী (স্কেলিং, কনট্রাস্ট), বধির এবং কম শোনা ব্যবহারকারী (সাবটাইটেল, শব্দের ভিজ্যুয়াল বিকল্প), এবং সীমিত মোটর নিয়ন্ত্রণ ব্যবহারকারী (ভয়েস কন্ট্রোল, Switch Control, বড় টাচ এলাকা)।
আইনি প্রয়োজনীয়তা — অনেক দেশে, অ্যাক্সেসিবিলিটি আইনত বাধ্যতামূলক। মার্কিন যুক্তরাষ্ট্র: Section 508 এবং ADA। ইইউ: European Accessibility Act (2025)। যুক্তরাজ্য: Equality Act 2010। অ্যাক্সেসিবিলিটি সমর্থন ছাড়া, একটি অ্যাপ মামলার লক্ষ্যবস্তু হতে পারে — 2023 সালে মার্কিন যুক্তরাষ্ট্রে অ্যাক্সেসযোগ্য নয় এমন ডিজিটাল পণ্য সম্পর্কে 4,000-এরও বেশি মামলা দায়ের করা হয়েছে। Apple এবং Google অ্যাপ মডারেশনের সময় অ্যাক্সেসিবিলিটি পরীক্ষা করে: App Store Review Guidelines (4.2) এবং Google Play Store ন্যূনতম অ্যাক্সেসিবিলিটি সমর্থন প্রয়োজন।
ব্যবসায়িক যুক্তি — অ্যাক্সেসিবিলিটি আপনার দর্শকদের প্রসারিত করে। Return on Disability (2021) অনুসারে, প্রতিবন্ধী ব্যক্তিরা বার্ষিক 13 ট্রিলিয়ন ডলার নিষ্পত্তিযোগ্য আয় নিয়ন্ত্রণ করে। অ্যাক্সেসযোগ্য অ্যাপগুলি অনুসন্ধানে আরও ভাল র্যাঙ্ক করে (সিম্যান্টিক HTML, alt টেক্সট), উচ্চ ব্যবহারকারী রেটিং পায় এবং UX সমস্যা সম্পর্কে কম পর্যালোচনা পায়। IT Sectr-এ, আমরা সমস্ত প্রকল্পের সংজ্ঞায় অ্যাক্সেসিবিলিটি অন্তর্ভুক্ত করি — এটি একটি গুণমান মান, কোনো ঐচ্ছিক উন্নতি নয়।
VoiceOver — iOS, iPadOS এবং macOS-এ নির্মিত Apple-এর স্ক্রিন রিডার। ব্যবহারকারী স্ক্রিনে আঙুল টেনে নেয়, VoiceOver আঙুলের নীচে উপাদানের নাম পড়ে। ডাবল-ট্যাপ উপাদান সক্রিয় করে। VoiceOver 40টিরও বেশি অঙ্গভঙ্গি সমর্থন করে: তিন-আঙুল সুইপ (স্ক্রোলিং), দুই-আঙুল ডাবল-ট্যাপ (থামা), Z-অঙ্গভঙ্গি (পিছনে যাওয়া)। ডেভেলপাররা UIAccessibility প্রোটোকল এবং accessibilityLabel, accessibilityTraits, accessibilityHint বৈশিষ্ট্যের মাধ্যমে VoiceOver কী এবং কীভাবে পড়ে তা নিয়ন্ত্রণ করে।
class CustomButton: UIButton {
override var isAccessibilityElement: Bool {
get { return true }
set {}
}
// ওভাররাইড accessibilityLabel
override var accessibilityLabel: String? {
get { return "ফর্ম সাবমিট বাটন" }
set {}
}
// ওভাররাইড accessibilityHint
override var accessibilityHint: String? {
get { return "ডেটা সাবমিট করতে ডাবল-ট্যাপ করুন" }
set {}
}
// ওভাররাইড accessibilityTraits
override var accessibilityTraits: UIAccessibilityTraits {
get { return .button }
set {}
}
}
// Dynamic Type — টেক্সট স্কেলিং
titleLabel.font = UIFontMetrics.default.scaledFont(
for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true
ডায়নামিক টাইপোগ্রাফি — iOS-এ Dynamic Type ব্যবহারকারীকে টেক্সটের আকার বেছে নিতে দেয় (XS থেকে XXXL পর্যন্ত)। ডেভেলপাররা স্বয়ংক্রিয় স্কেলিংয়ের জন্য UIFontMetrics.scaledFont ব্যবহার করে। টেক্সট অবশ্যই সমস্ত আকারে সঠিকভাবে প্রদর্শিত হবে: লাইনগুলি কাটা যাবে না, বাটনগুলি টেক্সটের অনুপাতে বাড়তে হবে। টেক্সট আকার পরিবর্তন করলে UITableView স্বয়ংক্রিয়ভাবে সেলের উচ্চতা আপডেট করে। Dynamic Type উপেক্ষা করার অর্থ আপনার অ্যাপকে কম দৃষ্টি সম্পন্ন ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য করে তোলা।
SwiftUI অ্যাক্সেসিবিলিটি মডিফায়ার প্রদান করে: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority()। ডিফল্টরূপে, সমস্ত স্ট্যান্ডার্ড SwiftUI উপাদান (Text, Button, Image) ইতিমধ্যে স্বয়ংক্রিয় লেবেল সহ অ্যাক্সেসিবিলিটি উপাদান। কাস্টম View-এর জন্য, .accessibilityElement(children: .combine) ব্যবহার করে চাইল্ড উপাদানগুলিকে একত্রিত করুন। SwiftUI স্বয়ংক্রিয়ভাবে Dynamic Type এবং VoiceOver সমর্থন করে।
VStack {
Image(systemName: "trash")
.accessibilityLabel(Text("আইটেম মুছুন"))
Text("ট্র্যাশ")
.font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("নির্বাচিত আইটেম স্থায়ীভাবে মুছে ফেলে"))
TalkBack — Google-এর স্ক্রিন রিডার, বেশিরভাগ Android ডিভাইসে প্রি-ইনস্টল (সমস্ত Android 5+ সংস্করণের জন্য Google Play-তে উপলব্ধ)। TalkBack VoiceOver-এর মতো একই অঙ্গভঙ্গি ব্যবহার করে: নেভিগেশনের জন্য সুইপ, সক্রিয় করতে ডাবল-ট্যাপ। ডেভেলপাররা XML-এ android:contentDescription অ্যাট্রিবিউটের মাধ্যমে বা কোডে setContentDescription() এর মাধ্যমে উপাদানের বিবরণ সেট করে। ImageView-এর জন্য, contentDescription বাধ্যতামূলক — এটি ছাড়া, TalkBack «আনলেবেলড» বলবে বা ফাইলের নাম পড়বে।
// ImageView-এর জন্য XML: contentDescription
<ImageView
android:id="@+id/iconDelete"
android:src="@drawable/ic_delete"
android:contentDescription="@string/delete_button_desc"
android:focusable="true"
android:clickable="true" />
// Kotlin: প্রোগ্রামেটিক অ্যাসাইনমেন্ট
iconDelete.contentDescription = getString(R.string.delete_button_desc)
// Accessibility Delegate (কাস্টম)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfo
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "মুছুন বাটন"
info.contentDescription = "নির্বাচিত আইটেম মুছুন"
info.className = Button::class.java.name
}
}
// ডায়নামিক আপডেটের জন্য Live Regions
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
Live Regions — ফোকাস ছাড়া বিষয়বস্তু পরিবর্তন সম্পর্কে TalkBack-কে জানানোর জন্য Android-এর পদ্ধতি। android:accessibilityLiveRegion অ্যাট্রিবিউট তিনটি মান গ্রহণ করে: none (কোনো বিজ্ঞপ্তি নেই), polite (বর্তমানের পরে ঘোষণা), assertive (অবিলম্বে ঘোষণা)। লোডিং স্ট্যাটাস আপডেটের জন্য polite ব্যবহার করুন, গুরুতর ত্রুটির জন্য assertive। assertive-এর অত্যধিক ব্যবহার ব্যবহারকারীর জন্য বিশৃঙ্খলা সৃষ্টি করবে — TalkBack ক্রমাগত বর্তমান কাজে বাধা দেবে।
Accessibility Scanner — সোর্স কোডে অ্যাক্সেস ছাড়া Android অ্যাপ অ্যাক্সেসিবিলিটি পরীক্ষার জন্য Google-এর একটি বিনামূল্যের অ্যাপ। স্ক্যানার পরীক্ষা করে: টেক্সট কনট্রাস্ট, টাচ এলাকার আকার (Android অ্যাক্সেসিবিলিটি নির্দেশিকা অনুসারে ন্যূনতম 48×48dp), ImageView-এর জন্য contentDescription এবং সঠিক উপাদান শ্রেণিবিন্যাস। স্বয়ংক্রিয় পরীক্ষার জন্য, Espresso থেকে AccessibilityChecks ব্যবহার করুন — এগুলি CI/CD-তে সংহত হয় এবং প্রতিটি বিল্ডের সাথে অ্যাক্সেসিবিলিটি পরীক্ষা করে।
WCAG 2.1 (Web Content Accessibility Guidelines) — W3C দ্বারা বিকশিত আন্তর্জাতিক অ্যাক্সেসিবিলিটি মান। সংস্করণ 2.1 (2018) মোবাইল অ্যাপ্লিকেশনের জন্য 13টি অতিরিক্ত মানদণ্ড অন্তর্ভুক্ত করে। সামঞ্জস্যের স্তর: A (ন্যূনতম), AA (বেশিরভাগ প্রতিষ্ঠানের জন্য বাধ্যতামূলক), AAA (সর্বোচ্চ)। Apple এবং Google অ্যাপ প্রকাশের জন্য ন্যূনতম হিসাবে স্তর AA সুপারিশ করে। WCAG 2.2 2023 সালে ফোকাস এবং ইনপুটের জন্য পরিমার্জন সহ প্রকাশিত হয়েছিল।
মূল মানদণ্ড মোবাইল ডেভেলপমেন্টের জন্য: কমপক্ষে 4.5:1 (AA) বা 7:1 (AAA) টেক্সট কনট্রাস্ট, কমপক্ষে 44×44pt (iOS) বা 48×48dp (Android) টাচ এলাকার আকার, কার্যকারিতা না হারিয়ে ল্যান্ডস্কেপ এবং পোর্ট্রেট ওরিয়েন্টেশনের জন্য সমর্থন, অ্যানিমেশন নিষ্ক্রিয় করার ক্ষমতা (prefers-reduced-motion), মাল্টিমিডিয়ার জন্য ক্যাপশন এবং ভয়েস কন্ট্রোলের সাথে সামঞ্জস্য (iOS-এ Voice Control, Android-এ Voice Access)।
| WCAG 2.1 মানদণ্ড | স্তর | iOS প্রয়োজনীয়তা | Android প্রয়োজনীয়তা |
|---|---|---|---|
| 1.4.3 কনট্রাস্ট (টেক্সট) | AA | সাধারণের জন্য 4.5:1, বড়র জন্য 3:1 | সাধারণের জন্য 4.5:1, বড়র জন্য 3:1 |
| 1.4.11 কনট্রাস্ট (অ-টেক্সট) | AA | আইকন, বর্ডারের জন্য 3:1 | আইকন, বর্ডারের জন্য 3:1 |
| 2.5.5 লক্ষ্য আকার | AAA | 44×44pt | 48×48dp |
| 2.3.3 অ্যানিমেশন | AAA | prefers-reduced-motion | android:animateLayoutChanges |
| 4.1.2 নাম, ভূমিকা, মান | A | accessibilityLabel, traits | contentDescription, role |
কনট্রাস্ট পরীক্ষার সরঞ্জাম — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode)। IT Sectr-এ, আমরা ডিজাইন পর্যায়ে (Figma + Stark) এবং আবার ডেভেলপমেন্ট পর্যায়ে (Accessibility Inspector / Accessibility Scanner) কনট্রাস্ট পরীক্ষা করি। 18pt (14pt bold) এর কম সমস্ত টেক্সটের জন্য ন্যূনতম প্রয়োজন 4.5:1। লোগো এবং আলংকারিক উপাদানের জন্য কনট্রাস্ট প্রয়োজন নেই।
iOS টেস্টিং — Xcode-এ Accessibility Inspector (Xcode → Open Developer Tool → Accessibility Inspector) প্রতিটি উপাদানের জন্য লেবেল, traits এবং hint পরীক্ষা করে। VoiceOver সেটিংসে বা অ্যাক্সেসিবিলিটি শর্টকাটের (বাটনে ট্রিপল-ক্লিক) মাধ্যমে সক্রিয় করা যেতে পারে। স্বয়ংক্রিয় পরীক্ষার জন্য, XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement) সহ XCUITest ব্যবহার করুন। Apple VoiceOver সক্রিয় থাকা অবস্থায় সমস্ত অ্যাপ স্ক্রিন পরীক্ষা করার সুপারিশ করে।
Android টেস্টিং — Accessibility Scanner (Play Store) কনট্রাস্ট, টাচ এলাকার আকার এবং contentDescription পরীক্ষা করে। অটোমেশনের জন্য: Espresso AccessibilityChecks (ইমপোর্ট: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1')। Google নিম্নলিখিত চেকলিস্ট সুপারিশ করে: প্রতিটি ImageView-এর contentDescription আছে, টাচ এলাকা কমপক্ষে 48×48dp, টেক্সট ক্লিপিং ছাড়াই 200% স্কেল হয় এবং সমস্ত উপাদান TalkBack সুইপের মাধ্যমে অ্যাক্সেসযোগ্য।
IT Sectr চেকলিস্ট — রিলিজের আগে, আমরা যাচাই করি: (1) VoiceOver/TalkBack সমস্ত উপাদান সঠিকভাবে পড়ে, (2) টেক্সট কার্যকারিতা না হারিয়ে সর্বাধিক আকারে স্কেল হয়, (3) সমস্ত ImageView-এর contentDescription আছে, (4) সমস্ত থিমে টেক্সট কনট্রাস্ট ≥4.5:1, (5) টাচ এলাকা ≥44pt/48dp, (6) শুধুমাত্র লং প্রেসের মাধ্যমে অ্যাক্সেসযোগ্য কোনো কনটেক্সট মেনু নেই, (7) সিস্টেম সেটিংসে Reduce Motion / Remove Animations-এর জন্য সমর্থন। এই চেকলিস্ট প্রতিটি স্প্রিন্টের সংজ্ঞার অংশ।
সাধারণ জিজ্ঞাসা
VoiceOver — iOS, iPadOS, macOS-এর জন্য Apple-এর স্ক্রিন রিডার। এক-আঙুল এবং বহু-আঙুলের অঙ্গভঙ্গি (সুইপ, ডাবল-ট্যাপ) ব্যবহার করে। TalkBack — অনুরূপ অঙ্গভঙ্গি সহ Android-এর জন্য Google-এর সমতুল্য। VoiceOver accessibilityLabel পড়ে, TalkBack contentDescription পড়ে। উভয়ই ব্রেইল ডিসপ্লে এবং ভয়েস কন্ট্রোল সমর্থন করে। কার্যকারিতায় কোনো মৌলিক পার্থক্য নেই।
contentDescription — Android-এ View-এর একটি অ্যাট্রিবিউট যা TalkBack-এর জন্য টেক্সট বিবরণ সেট করে। এটি ছাড়া, TalkBack «আনলেবেলড» বলে বা ক্লাসের নাম (ImageView, Button) পড়ে। এটি XML-এ android:contentDescription="@string/desc" বা কোডে view.contentDescription = "টেক্সট" এর মাধ্যমে সেট করা হয়। আলংকারিক ছবির জন্য, contentDescription=@null ব্যবহার করুন।
WCAG 2.1 স্তর AA অনুসারে: সাধারণ টেক্সটের জন্য 4.5:1 এবং বড় টেক্সটের (18pt বা 14pt bold থেকে) জন্য 3:1। স্তর AAA: সাধারণের জন্য 7:1 এবং বড়র জন্য 4.5:1। উভয় থিমে (হালকা/গাঢ়) কনট্রাস্ট পরীক্ষা করুন। Google-এর মতে কনট্রাস্ট লঙ্ঘন মোবাইল অ্যাপে সবচেয়ে সাধারণ অ্যাক্সেসিবিলিটি সমস্যা।
হ্যাঁ, Apple সমস্ত অ্যাপ্লিকেশনের জন্য Dynamic Type সুপারিশ করে। ব্যবহারকারী সেটিংসে টেক্সট আকার সেট করে। ডেভেলপাররা UIFontMetrics.scaledFont ব্যবহার করে — ফন্ট স্বয়ংক্রিয়ভাবে স্কেল হয়। Dynamic Type ছাড়া, কম দৃষ্টি সম্পন্ন ব্যবহারকারীরা টেক্সট পড়তে পারেন না। iOS App Store মডারেশনের সময় স্বয়ংক্রিয়ভাবে Dynamic Type পরীক্ষা করে।
WCAG (Web Content Accessibility Guidelines) — W3C-এর আন্তর্জাতিক বিষয়বস্তু অ্যাক্সেসিবিলিটি মান। সংস্করণ 2.1 (2018) মোবাইল অ্যাপের জন্য মানদণ্ড অন্তর্ভুক্ত করে: কনট্রাস্ট, টাচ এলাকার আকার (44×44pt), স্ক্রিন রিডার সমর্থন, অঙ্গভঙ্গির বিকল্প এবং ক্যাপশন। স্তর AA হল App Store এবং Google Play-এ প্রকাশের জন্য ন্যূনতম মান।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন