آسان‌تر کردن دسترسی به برنامه‌ها

سعی کنید برنامه 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 باید شرح متفاوتی داشته باشد، هرکدام نشان‌دهنده محتوایی باشد که برای موردی خاص منحصربه‌فرد است، مانند نام شهر در فهرست مکان‌ها.

  • از hideFromAccessibility API برای علامت‌گذاری عناصر صرفاً تزئینی استفاده کنید تا سرویس‌های دسترس‌پذیری بتوانند آن‌ها را نادیده بگیرند. اگر عنصر میانای کاربر پارامتر contentDescription دارد اما صرفاً تزئینی است (مثل Icon که بخشی از عنصر میانای کاربر دیگری است)، null را ارسال کنید تا از برچسب‌گذاری زائد جلوگیری شود. برای موارد استفاده پیچیده‌تر، به ادغام و پاک کردن مراجعه کنید.

  • کدتان را آزمایش کنید تا مطمئن شوید شرح محتوا مطابق انتظار ارائه می‌شود. Android Lint، آزمایش Compose، و ابزارهای آزمایش دستی و خودکار می‌توانند مشکلات رایج را پرچم‌گذاری کنند و مشکلات را در پیاده‌سازی شما آشکار کنند.

منابع بیشتر

برای کسب اطلاعات بیشتر درباره دسترس‌پذیرتر کردن برنامه‌تان، منابع اضافی زیر را ببینید:

Codelabs

ویدیوها

محتوا را مشاهده می‌کند