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