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

سعی کنید برنامه 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)
        )
    }
}

توجه داشته باشید که برای Text ترکیب‌پذیرها نیازی به ارائه contentDescription ندارید. خدمات دسترس‌پذیری Android (مثل TalkBack) به‌طور خودکار نوشتار را اعلام می‌کنند.

هنگام افزودن شرح به عناصر واسط کاربر برنامه‌تان، شیوه‌های مطلوب زیر را درنظر داشته باشید:

  • از توضیحات برای انتقال هدف و نتیجه تعامل استفاده کنید، نه جزئیات بصری. از Role دارایی معنایی (مثل Role.Button یا Role.Switch) برای آشکار کردن نوع عنصر میانای کاربر استفاده کنید. به‌این ترتیب، صفحه‌خوان‌ها می‌توانند عنصر را به‌درستی اعلام کنند.

  • از تکرار در توضیحات خودداری کنید. برای مثال، اگر انتخاب دکمه‌ای باعث می‌شود کنش «ارسال» در برنامه‌تان انجام شود، شرح دکمه را "Submit" بگذارید، نه "Submit button".

  • هر شرح باید منحصربه‌فرد باشد. به این ترتیب، وقتی کاربران صفحه‌خوان با شرح عنصر تکراری مواجه می‌شوند، به‌درستی تشخیص می‌دهند که تمرکز روی عنصری است که قبلاً تمرکز روی آن بوده است. به‌طور خاص، هر مورد در فهرستی مانند LazyColumn باید توضیح متفاوتی داشته باشد که هریک محتوای منحصربه‌فرد مربوط به مورد معینی را منعکس کند، مثلاً نام شهر در فهرست مکان‌ها.

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

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

منابع بیشتر

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

Codelabs

ویدیوها

محتوا را می‌بیند