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

سعی کنید برنامه اندروید شما برای همه، از جمله افرادی که نیازهای دسترسی دارند، قابل استفاده باشد.

افراد دارای اختلال بینایی، کوررنگی، اختلال شنوایی، اختلال در مهارت، معلولیت‌های شناختی و بسیاری از معلولیت‌های دیگر از دستگاه‌های اندروید استفاده می‌کنند. وقتی برنامه‌هایی را با در نظر گرفتن دسترسی‌پذیری توسعه می‌دهید، تجربه کاربری را برای افرادی که نیازهای دسترسی‌پذیری دارند، بهتر می‌کنید.

این صفحه دستورالعمل‌هایی برای پیاده‌سازی عناصر کلیدی دسترسی‌پذیری ارائه می‌دهد تا همه بتوانند راحت‌تر از برنامه شما استفاده کنند. برای راهنمایی عمیق‌تر در مورد چگونگی افزایش دسترسی‌پذیری برنامه، به اصول بهبود دسترسی‌پذیری برنامه مراجعه کنید.

افزایش خوانایی متن

برای هر مجموعه متن در برنامه شما، توصیه می‌کنیم کنتراست رنگ - یا تفاوت در روشنایی درک شده بین رنگ متن و رنگ پس‌زمینه پشت متن - بالاتر از یک آستانه خاص باشد. آستانه دقیق به اندازه فونت متن و اینکه آیا متن به صورت پررنگ نمایش داده می‌شود یا خیر بستگی دارد:

  • اگر متن کوچکتر از ۱۸sp است، یا اگر متن پررنگ و کوچکتر از ۱۴sp است، از رنگ‌های پیش‌زمینه و پس‌زمینه‌ای استفاده کنید که منجر به نسبت کنتراست رنگی حداقل ۴.۵:۱ شود.
  • برای سایر متن‌ها، نسبت کنتراست رنگ را حداقل روی ۳:۱ تنظیم کنید.

تصویر زیر دو نمونه از تضاد رنگ متن با پس‌زمینه را نشان می‌دهد:

دو مثال از کلمه «متن» روی پس‌زمینه‌های رنگی. مثال سمت چپ تضاد رنگی کمی بین متن و پس‌زمینه دارد، در حالی که مثال سمت راست تضاد رنگی کافی دارد.
شکل ۱. کنتراست رنگ کمتر از حد توصیه شده (چپ) و کافی (راست).

برای بررسی کنتراست رنگ متن به پس‌زمینه در برنامه خود، از یک بررسی‌کننده کنتراست رنگ آنلاین یا برنامه Accessibility Scanner استفاده کنید.

از کنترل‌های بزرگ و ساده استفاده کنید

اگر کنترل‌های برنامه شما راحت‌تر دیده و لمس شوند، استفاده از رابط کاربری آن آسان‌تر است. برای رابط‌های لمسی، توصیه می‌کنیم هر عنصر رابط کاربری تعاملی دارای یک ناحیه قابل فوکوس یا اندازه هدف لمسی حداقل ۴۸dpx باشد. هرچه بزرگتر باشد، بهتر است.

در Jetpack Compose، بسیاری از کامپوننت‌های متریال داخلی مانند 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 ندارید. سرویس‌های دسترسی اندروید (مانند TalkBack) به طور خودکار خود متن را اعلام می‌کنند.

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

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

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

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

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

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

منابع اضافی

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

کدلبز

ویدیوها

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