سعی کنید برنامه Android خود را برای همه، ازجمله افراد دارای نیازهای دسترسپذیری، قابلاستفاده کنید.
افراد دارای اختلال بینایی، کوررنگی، اختلال شنوایی، اختلال مهارت، ناتوانیهای شناختی، و بسیاری از ناتوانیهای دیگر از دستگاههای Android استفاده میکنند. وقتی برنامهها را با درنظر گرفتن دسترسپذیری توسعه میدهید، تجربه کاربری را برای افراد دارای نیازهای دسترسپذیری بهبود میبخشید.
این صفحه دستورالعملهایی را برای پیادهسازی عناصر کلیدی دسترسپذیری ارائه میدهد تا همه بتوانند راحتتر از برنامهتان استفاده کنند. برای راهنمایی عمیقتر درباره نحوه دسترسپذیرتر کردن برنامه، اصول بهبود دسترسپذیری برنامه را ببینید.
افزایش رؤیتپذیری نوشتار
برای هر مجموعه نوشتار در برنامهتان، توصیه میکنیم کنتراست رنگ—یا تفاوت در روشنایی درکشده بین رنگ نوشتار و رنگ پسزمینه پشت نوشتار—بالاتر از آستانه خاصی باشد. آستانه دقیق به اندازه قلم نوشتار و اینکه نوشتار بهصورت پررنگ نمایش داده میشود یا نه بستگی دارد:
- اگر نوشتار کوچکتر از ۱۸sp است، یا اگر نوشتار پررنگ و کوچکتر از ۱۴sp است، از رنگهای پیشزمینه و پسزمینهای استفاده کنید که منجر به نسبت کنتراست رنگ حداقل ۴٫۵:۱ شود.
- برای همه نوشتارهای دیگر، نسبت کنتراست رنگ را حداقل روی ۳:۱ تنظیم کنید.
تصویر زیر دو نمونه از کنتراست رنگ نوشتار به پسزمینه را نشان میدهد:
برای بررسی کنتراست رنگ نوشتار به پسزمینه در برنامهتان، از یک بررسیکننده کنتراست رنگ آنلاین یا برنامه اسکنر دسترسپذیری استفاده کنید.
استفاده از کنترلهای بزرگ و ساده
اگر کنترلهای میانای کاربر برنامهتان راحتتر دیده و تکضرب زده شود، استفاده از آن آسانتر خواهد بود. برای میاناهای لمسی، توصیه میکنیم هر عنصر تعاملی میانای کاربر دارای ناحیه قابلتمرکز، یا اندازه هدف لمسی، حداقل ۴۸ در ۴۸ پیکسل مستقل از تراکم باشد. هرچه بزرگتر باشد بهتر است.
در Jetpack Compose، بسیاری از مؤلفههای Material داخلی مانند Button،
IconButton، و ListItem ازقبل این حداقل اندازه را اعمال میکنند. اما هنگام
ایجاد عناصر تعاملی سفارشی، باید اندازه را خودتان تنظیم کنید.
در قطعه کد زیر، یک عنصر کوچک میانای کاربر با اختصاص دادن هدف لمس بزرگتر به آن، دسترسپذیر شده است:
@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) ) } }
برای اطلاعات بیشتر درباره اندازههای هدف لمسی، به حداقل اندازههای هدف لمسی مراجعه کنید.
توصیف هر عنصر میانای کاربر
برای هر عنصر میانای کاربر در برنامهتان، شرحی اضافه کنید که
هدف عنصر را توضیح دهد. در بیشتر موارد، این شرح را در مشخصه contentDescription عنصر قرار میدهید، همانطور که در تکهکد زیر نشان داده شده است:
@Composable private fun ShareButton(onClick: () -> Unit) { IconButton(onClick = onClick) { Icon( imageVector = Icons.Filled.Share, contentDescription = stringResource(R.string.label_share) ) } }
توجه داشته باشید که لازم نیست contentDescription را برای
ترکیبشدنیهای Text ارائه دهید. خدمات دسترسپذیری Android (مثل TalkBack) بهطور خودکار
خود نوشتار را اعلام میکنند.
هنگام افزودن شرح به عناصر میانای کاربر برنامهتان، روالهای مطلوب زیر را درنظر داشته باشید:
از توضیحات برای انتقال هدف و نتیجه تعامل استفاده کنید، نه جزئیات بصری. از ویژگی معنایی
Role(مثلRole.ButtonیاRole.Switch) برای نمایش نوع عنصر میانای کاربر استفاده کنید. بهاینترتیب، صفحهخوانها میتوانند عنصر را بهدرستی اعلام کنند.از تکرار در شرحها اجتناب کنید. برای مثال، اگر انتخاب دکمهای باعث انجام کنش «ارسال» در برنامهتان میشود، شرح دکمه را
"Submit"قرار دهید، نه"Submit button".هر شرح باید یکتا باشد. به این ترتیب، وقتی کاربران صفحهخوان با شرح عنصر تکراری مواجه میشوند، بهدرستی تشخیص میدهند که تمرکز روی عنصری است که قبلاً هم تمرکز روی آن بوده است. بهویژه، هر مورد در فهرستی مانند
LazyColumnباید شرح متفاوتی داشته باشد، هرکدام نشاندهنده محتوایی باشد که برای موردی خاص منحصربهفرد است، مانند نام شهر در فهرست مکانها.از
hideFromAccessibilityAPI برای علامتگذاری عناصر صرفاً تزئینی استفاده کنید تا سرویسهای دسترسپذیری بتوانند آنها را نادیده بگیرند. اگر عنصر میانای کاربر پارامترcontentDescriptionدارد اما صرفاً تزئینی است (مثلIconکه بخشی از عنصر میانای کاربر دیگری است)،nullرا ارسال کنید تا از برچسبگذاری زائد جلوگیری شود. برای موارد استفاده پیچیدهتر، به ادغام و پاک کردن مراجعه کنید.کدتان را آزمایش کنید تا مطمئن شوید شرح محتوا مطابق انتظار ارائه میشود. Android Lint، آزمایش Compose، و ابزارهای آزمایش دستی و خودکار میتوانند مشکلات رایج را پرچمگذاری کنند و مشکلات را در پیادهسازی شما آشکار کنند.
منابع بیشتر
برای کسب اطلاعات بیشتر درباره دسترسپذیرتر کردن برنامهتان، منابع اضافی زیر را ببینید: