Постарайтесь сделать приложение для Android удобным для всех, в том числе для людей с ограниченными возможностями.
Устройствами Android пользуются люди с нарушениями зрения, слуха, моторики, когнитивными расстройствами и другими особенностями здоровья. Разрабатывая приложения с учетом специальных возможностей, вы делаете их удобнее для людей с ограниченными возможностями.
На этой странице приведены рекомендации по реализации ключевых элементов специальных возможностей, чтобы вашим приложением было удобно пользоваться всем. Подробные рекомендации по улучшению специальных возможностей приложения вы найдете в статье Принципы улучшения специальных возможностей приложения.
Увеличить видимость текста
Для каждого набора текста в приложении мы рекомендуем использовать цветовой контраст, то есть разницу в воспринимаемой яркости между цветом текста и цветом фона за текстом, выше определенного порогового значения. Точное пороговое значение зависит от размера шрифта и от того, является ли текст полужирным:
- Если размер текста меньше 18 sp или если текст полужирный и его размер меньше 14 sp, используйте цвета переднего и заднего планов, которые обеспечивают коэффициент контрастности не менее 4,5:1.
- Для остального текста коэффициент контрастности должен быть не менее 3:1.
На изображении ниже показаны два примера контрастности текста и фона.
Чтобы проверить контрастность текста и фона в приложении, используйте онлайн-инструмент или приложение Сканер доступности.
Используйте крупные и простые элементы управления
Интерфейс приложения будет удобнее, если элементы управления будут хорошо видны и на них будет легко нажимать. Для сенсорных интерфейсов мы рекомендуем, чтобы каждый интерактивный элемент пользовательского интерфейса имел область фокусировки или размер области прикосновения не менее 48 x 48 dp. Чем больше, тем лучше.
В Jetpack Compose многие встроенные компоненты Material Design, такие как 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) ) } }
Обратите внимание, что для composable-функций Text не нужно указывать contentDescription. Сервисы специальных возможностей Android (например, TalkBack) автоматически озвучивают текст.
При добавлении описаний к элементам интерфейса приложения следуйте приведенным ниже рекомендациям.
В описаниях указывайте цель и результат взаимодействия, а не визуальные детали. Используйте семантическое свойство
Role(например,Role.ButtonилиRole.Switch), чтобы указать тип элемента интерфейса. Это позволит программам чтения с экрана правильно озвучивать элемент.Избегайте повторов в описаниях. Например, если нажатие кнопки приводит к отправке данных, ее описание должно быть
"Submit", а не"Submit button".Каждое описание должно быть уникальным. Таким образом, когда пользователи программы чтения с экрана сталкиваются с повторяющимся описанием элемента, они правильно распознают, что фокус находится на элементе, который уже был в фокусе ранее. В частности, у каждого элемента в списке
LazyColumnдолжно быть свое описание, отражающее уникальный контент, например название города в списке местоположений.Используйте API
hideFromAccessibility, чтобы пометить чисто декоративные элементы, чтобы сервисы специальных возможностей могли их игнорировать. Если у элемента интерфейса есть параметрcontentDescription, но он является чисто декоративным (например,Icon, который является частью другого элемента интерфейса), передайтеnull, чтобы избежать избыточной маркировки. Более сложные примеры приведены в разделе Объединение и очистка.Протестируйте код, чтобы убедиться, что описание контента передается правильно. Android Lint, Compose testing, а также инструменты для ручного и автоматического тестирования могут выявлять распространенные проблемы и указывать на ошибки в реализации.
Дополнительные ресурсы
Чтобы узнать больше о том, как сделать приложение более доступным, ознакомьтесь со следующими дополнительными ресурсами: