স্ক্রিন রিডারের মতো অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারী, কোনও ইন্টারফেসে এলিমেন্টের অর্থ বুঝতে, কন্টেন্ট লেবেলের উপরে নির্ভর করে।
কোনও এলিমেন্টের মধ্যে গ্রাফিক্সের মাধ্যমে তথ্য শেয়ার করার মতো কিছু ক্ষেত্রে, কন্টেন্ট লেবেল এলিমেন্টের সাথে যুক্ত অর্থ বা অ্যাকশনের টেক্সট বিবরণ প্রদান করতে পারে।
ইউজার ইন্টারফেসে এলিমেন্ট কন্টেন্ট লেবেল না দেওয়া হলে, কিছু ব্যবহারকারীর পক্ষে তাদের সামনে তুলে ধরা তথ্য বুঝতে অথবা ইন্টারফেসে অ্যাকশন করতে অসুবিধা হতে পারে।
প্রয়োগ
ভিউইন্টারফেসে কোনও নির্দিষ্ট প্রকারের Views
ব্যবহার করা হলে, সেগুলি সেই View
-এর সাথে যুক্ত উদ্দেশ্য বা অ্যাকশন বর্ণনা করা কন্টেন্ট লেবেল প্রদান করে।
কীভাবে কন্টেন্ট লেবেল প্রদান করা হয়
android:contentDescription
ImageView
, ImageButton
, CheckBox
অথবা গ্রাফিক্সের মাধ্যমে তথ্য শেয়ার করা অন্য কোনও View
ব্যবহার করার সময়, একটি android:contentDescription
অ্যাট্রিবিউট ব্যবহার করুন যাতে সেই View
-এর জন্য একটি কন্টেন্ট লেবেল দেওয়া যায়।
কখনও কখনও কন্টেন্ট লেবেল শুধুমাত্র রানটাইমে উপলভ্য তথ্যের উপরে নির্ভর করে অথবা একটি View
-এর অর্থ বিভিন্ন সময়ে পরিবর্তন হতে পারে। উদাহরণস্বরূপ, মিউজিক প্লেব্যাকের সময়, 'চালান' বোতাম পরিবর্তিত হয়ে 'পজ করুন' বোতাম হয়ে যেতে পারে। এইসব ক্ষেত্রে, উপযুক্ত সময়ে কন্টেন্ট লেবেল আপডেট করতে, View#setContentDescription(CharSequence contentDescription)
ব্যবহার করুন।
সাধারণত অ্যাক্সেসিবিলিটি পরিষেবা কোনও ViewGroup
-এর বিবরণ দিলে, এর চাইল্ড Views
-এর থেকে পাওয়া কন্টেন্ট লেবেলকে এটি একত্রিত করে। এই ধরনের আচরণকে ওভাররাইড করতে এবং সংশ্লিষ্ট আইটেম ও ফোকাস করা যায় না এমন চাইল্ড Views
-এর জন্য আপনি যে নিজস্ব বিবরণ দিতে চান তা দেখাতে, ViewGroup
-এ contentDescription
সেট করুন। ViewGroup
-এ সেট করা থাকলে, আপনাকে চাইল্ড Views
থেকে পাওয়া কন্টেন্ট লেবেলকে contentDescription
-এর মধ্যে যোগ করতে হতে পারে।
Android:hint
EditTexts
বা এডিটযোগ্য TextViews
-এর জন্য, একটি android:hint
অ্যাট্রিবিউট ব্যবহার করুন যার মাধ্যমে টেক্সট ফিল্ডের উদ্দেশ্যকে দেখানো যায়। এডিট করা যায় এমন Views
-এর জন্য কন্টেন্ট লেবেল হিসেবে android:contentDescription
কোডকে ব্যবহার করা যায় না।
android:labelFor
একটি android:labelFor
অ্যাট্রিবিউট ব্যবহার করুন যা অন্য একটি View
-এর হয়ে কন্টেন্ট লেবেল হিসেবে কাজ করার জন্য কোনও View
-কে দেখায়।
যেসব ক্ষেত্রে কন্টেন্ট লেবেল দেওয়ার প্রয়োজন হয় না
যেসব নির্দিষ্ট ক্ষেত্রে, কন্টেন্ট লেবেল আলাদা করে দেওয়া হয় না:
TextView
(অথবা এর সাবক্লাসে) রেন্ডার করা টেক্সট অ্যাক্সেসিবিলিটি পরিষেবায় অটোমেটিক প্রদান করা হয়। সাধারণভাবে অতিরিক্ত কন্টেন্ট লেবেল কোনও প্রয়োজনে লাগে না।- অলঙ্করণ করা ছবি বা ছবিগুলি গ্রাফিক্সের মাধ্যমে কোনও অর্থপূর্ণ তথ্য শেয়ার না করলে, তার জন্য কন্টেন্ট লেবেল দেওয়ার কোনও প্রয়োজন পড়ে না। এইসব ক্ষেত্রে, একটি
"@null"
-এরandroid:contentDescription
অ্যাট্রিবিউট এবং"no"
-এরandroid:importantForAccessibility
অ্যাট্রিবিউট সেট করুন।
আরও জানতে, Android ডেভেলপার ট্রেনিং ও API গাইড-এ কন্টেন্ট লেবেল প্রয়োগ করার ব্যাপারে পড়ুন।
যখন নির্দিষ্ট প্রকারের কম্পোজ করার উপযুক্ত আইটেম কোনও ইন্টারফেসে ব্যবহার করা হয়, তখন সেগুলির মধ্যে কন্টেন্ট লেবেল থাকতে হয় যা সেই কম্পোজ করার উপযুক্ত আইটেমের সাথে যুক্ত উদ্দেশ্য বা অ্যাকশনকে বর্ণনা করে।
কীভাবে কন্টেন্ট লেবেল প্রদান করা হয়
কন্টেন্ট সংক্রান্ত বিবরণ
Image
, Icon
বা গ্রাফিক্সের মাধ্যমে প্রদান করা তথ্য শেয়ার করা অন্য কোনও একটি নিচু লেভেলের কম্পোজ করার উপযুক্ত আইটেম দিতে, কন্টেন্ট সংক্রান্ত বিবরণ সেট করুন।
- রানটাইম সংক্রান্ত তথ্যের উপরে কন্টেন্ট লেবেল নির্ভর করতে এবং কম্পোজ করার উপযুক্ত আইটেমের অর্থ পরিবর্তিত হতে পারে। উদাহরণস্বরূপ, মিউজিক প্লেব্যাকের সময়কাল জুড়ে, একটি 'চালান' বোতাম পরিবর্তিত হয়ে 'পজ করুন' বোতাম হয়ে যেতে পারে।
- এইসব ক্ষেত্রে, State ব্যবহার করুন যাতে Compose টুলকিট, কন্টেন্ট সংক্রান্ত বিবরণে করা পরিবর্তন অবজার্ভ করতে এবং নতুন ভ্যালুর মাধ্যমে এটিকে আবার কম্পোজ করতে পারে। জানুন কীভাবে State ও Jetpack Compose ব্যবহার করতে হয়।
- কিছু কিছু ক্ষেত্রে, আপনি হয়ত নানা এলিমেন্টকে সিঙ্গল ফোকাস করা যায় এমন একটি এলিমেন্টের মধ্যে মার্জ করতে চাইবেন যা এগুলির ডিসেন্ডেন্ট এলিমেন্ট থেকে পাওয়া কন্টেন্ট লেবেলকে একত্রিত করে। জানুন কীভাবে এলিমেন্ট মার্জ করতে হয়।
লেবেল প্যারামিটার
TextField
-এর মতো কিছু কম্পোজ করার উপযুক্ত আইটেম, একটি বিকল্প label
প্যারামিটারের সাথে কাজ করে। লেবেল সেট করা হলে, এলিমেন্টটি সেই কম্পোজ করার উপযুক্ত আইটেমকে দেখায় যা label
-এ পাস করা হয়েছে। কম্পোজ করার উপযুক্ত আইটেমের বিবরণ দিতে অ্যাক্সেসিবিলিটি পরিষেবা ব্যবহার করা যেতে পারে।
যেসব ক্ষেত্রে কন্টেন্ট লেবেল দেওয়ার প্রয়োজন হয় না
এই ধরনের কিছু নির্দিষ্ট ক্ষেত্রে, কন্টেন্ট লেবেল যোগ করা হয় না:
Text
-এ রেন্ডার করা টেক্সট অথবাText
বজায় থাকা অন্যান্য কম্পোজ করার উপযুক্ত আইটেম, অটোমেটিক অ্যাক্সেসিবিলিটি পরিষেবাতে প্রদান করা হয়।- সেইসব অলঙ্করণ করা ছবি বা ছবিগুলি যা গ্রাফিক্সের মাধ্যমে অর্থপূর্ণ তথ্য শেয়ার করে না।
- এইসব ক্ষেত্রে,
contentDescription
প্যারামিটার বাModifier.semantics#contentDescription
প্রপার্টিকেnull
-এ সেট করুন অথবাModifier#clearAndSetSemantics
কল করুন।
- এইসব ক্ষেত্রে,
ডিজাইন
কোনও ইউজার ইন্টারফেস ডিজাইন করার সময়, অ্যাক্সেসিবিলিটি পরিষেবার ব্যবহারকারীদের জন্য কীভাবে গ্রাফিক্সের মাধ্যমে দেখানো কন্টেন্ট লেবেল করা হবে তার ব্যাপারে মনোযোগ সহকারে ভেবে দেখুন। কন্টেন্ট লেবেল এইসব নীতিকে অনুসরণ করে চলে:
- পরিষ্কার ও স্পষ্ট ভাষায় এলিমেন্টের সাথে যুক্ত অর্থ বা অ্যাকশনের বর্ণনা দিন।
- কোনও এলিমেন্টের কন্টেন্ট লেবেলে সেটির টাইপ বা স্টেট যোগ করবেন না।
- যদি কোনও অ্যাকশনের সাথে এলিমেন্টটি যুক্ত থাকে, তাহলে অ্যাকশনটির বিবরণ দিন, গ্রাফিক্সের মাধ্যমে তার উপস্থাপনাকে নয়।
- কীভাবে নির্দিষ্টভাবে এলিমেন্টের মাধ্যমে ইন্ট্যার্যাক্ট করতে হয় তার ব্যাপারে ব্যবহারকারীকে কোনও নির্দেশ দেবেন না।
আরও জানতে, মেটেরিয়াল ডিজাইন অ্যাক্সেসিবিলিটির লিখিত নির্দেশিকা পড়ুন।
পরীক্ষা করা
অ্যাপের ইউজার ইন্টারফেসের জন্য কোনও কন্টেন্ট লেবেল যে হারিয়ে যায়নি তা ম্যানুয়ালি যাচাই করে দেখতে:
- 'টকব্যাক' চালু করুন।
- অ্যাপ খুলুন।
- স্ক্রিনে প্রতিটি এলিমেন্টে অ্যাক্সেসিবিলিটি ফোকাস সরিয়ে নিয়ে যেতে, লিনিয়ার নেভিগেশন জেসচার ব্যবহার করুন।
- 'টকব্যাক' ফিচারের মাধ্যমে এলিমেন্টে ফোকাস সরিয়ে নিয়ে আসা হলে কিন্তু সেই এলিমেন্টের জন্য কোনও অর্থপূর্ণ উপস্থাপনার ব্যাপারে বলা না হলে অথবা কোনও "লেবেল না করা" মেসেজ বলা হলে, সেই এলিমেন্টে হয়ত কন্টেন্ট লেবেল পাওয়া যাবে না।
Android-এর অটোমেটিক পরীক্ষার টুল হারিয়ে যাওয়া কন্টেন্ট লেবেলকে শনাক্ত করতে পারে। অন-ডিভাইস অ্যাপের ম্যানুয়াল পরীক্ষা করতে, Android-এর জন্য অ্যাক্সেসিবিলিটি স্ক্যানার ব্যবহার করার কথা ভেবে দেখুন। অটোমেটিক পরীক্ষার জন্য, Espresso এবং Robolectric-এ অ্যাক্সেসিবিলিটি চেকিং চালু করুন।