আপনার অ্যান্ড্রয়েড অ্যাপটি যেন সকলের জন্য ব্যবহারযোগ্য হয়, বিশেষ করে যাদের বিশেষ সহায়তার প্রয়োজন রয়েছে তাদের জন্য।
দৃষ্টিশক্তিহীন, বর্ণান্ধ, শ্রবণশক্তিহীন, শারীরিক দক্ষতার ঘাটতি, জ্ঞানীয় অক্ষমতা এবং আরও নানা ধরনের অক্ষমতাযুক্ত ব্যক্তিরা অ্যান্ড্রয়েড ডিভাইস ব্যবহার করেন। যখন আপনি অ্যাক্সেসিবিলিটির কথা মাথায় রেখে অ্যাপ তৈরি করেন, তখন আপনি বিশেষ চাহিদাসম্পন্ন ব্যক্তিদের জন্য ব্যবহারকারীর অভিজ্ঞতা আরও উন্নত করেন।
এই পৃষ্ঠায় অ্যাক্সেসিবিলিটির মূল উপাদানগুলো বাস্তবায়নের জন্য নির্দেশিকা দেওয়া হয়েছে, যাতে সবাই আপনার অ্যাপটি আরও সহজে ব্যবহার করতে পারে। আপনার অ্যাপটিকে কীভাবে আরও অ্যাক্সেসিবল করা যায় সে সম্পর্কে আরও বিস্তারিত নির্দেশনার জন্য, “অ্যাপ অ্যাক্সেসিবিলিটি উন্নত করার নীতিসমূহ” দেখুন।
লেখার দৃশ্যমানতা বৃদ্ধি করুন
আপনার অ্যাপের প্রতিটি টেক্সট সেটের জন্য, আমরা সুপারিশ করি যে কালার কনট্রাস্ট —অর্থাৎ টেক্সটের রঙ এবং টেক্সটের পেছনের ব্যাকগ্রাউন্ডের রঙের মধ্যে অনুভূত উজ্জ্বলতার পার্থক্য—একটি নির্দিষ্ট থ্রেশহোল্ডের উপরে থাকা উচিত। সঠিক থ্রেশহোল্ডটি টেক্সটের ফন্ট সাইজ এবং টেক্সটটি বোল্ড আকারে প্রদর্শিত হচ্ছে কিনা তার উপর নির্ভর করে।
- যদি টেক্সটটি 18sp-এর চেয়ে ছোট হয়, অথবা যদি টেক্সটটি বোল্ড হয় এবং 14sp-এর চেয়ে ছোট হয়, তাহলে এমন ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ড কালার ব্যবহার করুন যাতে কালার কনট্রাস্ট রেশিও কমপক্ষে 4.5:1 হয়।
- অন্যান্য সমস্ত লেখার জন্য, রঙের বৈসাদৃশ্য অনুপাত কমপক্ষে ৩:১ এ সেট করুন।
নিচের চিত্রটিতে টেক্সট ও ব্যাকগ্রাউন্ডের রঙের বৈসাদৃশ্যের দুটি উদাহরণ দেখানো হয়েছে:
আপনার অ্যাপে টেক্সট ও ব্যাকগ্রাউন্ডের রঙের বৈসাদৃশ্য পরীক্ষা করতে, একটি অনলাইন কালার কনট্রাস্ট চেকার অথবা অ্যাক্সেসিবিলিটি স্ক্যানার অ্যাপ ব্যবহার করুন।
বড়, সহজ নিয়ন্ত্রণ ব্যবহার করুন
আপনার অ্যাপের UI ব্যবহার করা আরও সহজ হয়, যদি এর কন্ট্রোলগুলো সহজে দেখা ও ট্যাপ করা যায়। টাচ ইন্টারফেসের জন্য, আমরা সুপারিশ করি যে প্রতিটি ইন্টারেক্টিভ UI এলিমেন্টের ফোকাসযোগ্য এলাকা বা টাচ টার্গেট সাইজ কমপক্ষে 48dpx48dp হওয়া উচিত। এর চেয়ে বড় হলে আরও ভালো।
জেটপ্যাক কম্পোজে, Button , IconButton এবং ListItem মতো অনেক বিল্ট-ইন ম্যাটেরিয়াল কম্পোনেন্ট আগে থেকেই এই ন্যূনতম আকারটি প্রয়োগ করে। তবে, কাস্টম ইন্টারেক্টিভ এলিমেন্ট তৈরি করার সময়, আপনাকে নিজেই আকারটি সেট করতে হবে।
নিচের কোড স্নিপেটে, একটি ছোট UI এলিমেন্টকে বড় টাচ টার্গেট দিয়ে অ্যাক্সেসযোগ্য করা হয়েছে:
@Composable private fun LargeBox() { var clicked by remember { mutableStateOf(false) } Box( Modifier .size(100.dp) .background(if (clicked) Color.DarkGray else Color.LightGray) ) { Box( Modifier .align(Alignment.Center) .clickable { clicked = !clicked } .background(Color.Black) .sizeIn(minWidth = 48.dp, minHeight = 48.dp) ) } }
টাচ টার্গেটের আকার সম্পর্কে আরও তথ্যের জন্য, ন্যূনতম টাচ টার্গেটের আকার দেখুন।
প্রতিটি UI উপাদানের বর্ণনা দিন
আপনার অ্যাপের প্রতিটি UI এলিমেন্টের জন্য, সেটির উদ্দেশ্য বর্ণনা করে এমন একটি বিবরণ অন্তর্ভুক্ত করুন। বেশিরভাগ ক্ষেত্রে, আপনি এই বিবরণটি এলিমেন্টের contentDescription অ্যাট্রিবিউটে অন্তর্ভুক্ত করেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
@Composable private fun ShareButton(onClick: () -> Unit) { IconButton(onClick = onClick) { Icon( imageVector = Icons.Filled.Share, contentDescription = stringResource(R.string.label_share) ) } }
মনে রাখবেন যে Text কম্পোজেবল-এর জন্য আপনাকে contentDescription প্রদান করতে হবে না। অ্যান্ড্রয়েড অ্যাক্সেসিবিলিটি পরিষেবাগুলি (যেমন টকব্যাক) স্বয়ংক্রিয়ভাবে টেক্সটটি নিজেই ঘোষণা করে।
আপনার অ্যাপের UI উপাদানগুলিতে বিবরণ যোগ করার সময়, নিম্নলিখিত সেরা অনুশীলনগুলি মনে রাখবেন:
ইন্টারঅ্যাকশনের উদ্দেশ্য এবং ফলাফল বোঝাতে বর্ণনা ব্যবহার করুন, ভিজ্যুয়াল বিবরণ নয়। একটি UI এলিমেন্টের টাইপ প্রকাশ করতে
Rolesemantics প্রপার্টি (যেমনRole.ButtonবাRole.Switch) ব্যবহার করুন। এর ফলে, স্ক্রিন রিডারগুলো এলিমেন্টটিকে সঠিকভাবে ঘোষণা করতে পারে।বর্ণনায় পুনরাবৃত্তি পরিহার করুন। উদাহরণস্বরূপ, যদি কোনো বাটন নির্বাচন করলে আপনার অ্যাপে 'সাবমিট' অ্যাকশনটি ঘটে, তাহলে বাটনটির বর্ণনা
"Submit"লিখুন,"Submit button"নয়।প্রতিটি বিবরণ অনন্য হওয়া উচিত। এর ফলে, যখন স্ক্রিন রিডার ব্যবহারকারীরা কোনো এলিমেন্টের পুনরাবৃত্ত বিবরণের সম্মুখীন হন, তখন তারা সঠিকভাবে বুঝতে পারেন যে ফোকাসটি এমন একটি এলিমেন্টের উপর রয়েছে যেটি আগে থেকেই ফোকাসে ছিল। বিশেষ করে,
LazyColumnমতো একটি তালিকার প্রতিটি আইটেমের একটি ভিন্ন বিবরণ থাকা উচিত, যা একটি নির্দিষ্ট আইটেমের অনন্য বিষয়বস্তুকে প্রতিফলিত করবে, যেমন স্থানের তালিকায় একটি শহরের নাম।শুধুমাত্র আলংকারিক উপাদানগুলোকে চিহ্নিত করতে
hideFromAccessibilityAPI ব্যবহার করুন, যাতে অ্যাক্সেসিবিলিটি পরিষেবাগুলো সেগুলোকে উপেক্ষা করতে পারে। যদি কোনো UI উপাদানের একটিcontentDescriptionপ্যারামিটার থাকে কিন্তু সেটি শুধুমাত্র আলংকারিক হয় (যেমন একটিIconযা অন্য কোনো UI উপাদানের অংশ), তাহলে অপ্রয়োজনীয় লেবেলিং এড়াতেnullপাস করুন। আরও বিস্তারিত ব্যবহারের ক্ষেত্রগুলোর জন্য, Merging and clearing দেখুন।আপনার কোডটি পরীক্ষা করে নিশ্চিত করুন যে কন্টেন্টের বিবরণ প্রত্যাশা অনুযায়ী সরবরাহ করা হচ্ছে। অ্যান্ড্রয়েড লিন্ট, কম্পোজ টেস্টিং এবং ম্যানুয়াল ও স্বয়ংক্রিয় টেস্ট টুলগুলো সাধারণ সমস্যাগুলো চিহ্নিত করতে পারে এবং আপনার বাস্তবায়নের ত্রুটিগুলো প্রকাশ করতে পারে।
অতিরিক্ত সম্পদ
আপনার অ্যাপকে আরও সহজলভ্য করার বিষয়ে আরও জানতে, নিম্নলিখিত অতিরিক্ত রিসোর্সগুলো দেখুন: