Как сделать приложения более доступными

Постарайтесь сделать приложение для Android удобным для всех, в том числе для людей с ограниченными возможностями.

Устройствами Android пользуются люди с нарушениями зрения, слуха, моторики, когнитивными расстройствами и другими особенностями здоровья. Разрабатывая приложения с учетом специальных возможностей, вы делаете их удобнее для людей с ограниченными возможностями.

На этой странице приведены рекомендации по реализации ключевых элементов специальных возможностей, чтобы вашим приложением было удобно пользоваться всем. Подробные рекомендации по улучшению специальных возможностей приложения вы найдете в статье Принципы улучшения специальных возможностей приложения.

Увеличить видимость текста

Для каждого набора текста в приложении мы рекомендуем использовать цветовой контраст, то есть разницу в воспринимаемой яркости между цветом текста и цветом фона за текстом, выше определенного порогового значения. Точное пороговое значение зависит от размера шрифта и от того, является ли текст полужирным:

  • Если размер текста меньше 18 sp или если текст полужирный и его размер меньше 14 sp, используйте цвета переднего и заднего планов, которые обеспечивают коэффициент контрастности не менее 4,5:1.
  • Для остального текста коэффициент контрастности должен быть не менее 3:1.

На изображении ниже показаны два примера контрастности текста и фона.

Два примера слова "Текст" на цветном фоне. В примере слева контраст между текстом и фоном низкий, а в примере справа – достаточный.
Рисунок 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, а также инструменты для ручного и автоматического тестирования могут выявлять распространенные проблемы и указывать на ошибки в реализации.

Дополнительные ресурсы

Чтобы узнать больше о том, как сделать приложение более доступным, ознакомьтесь со следующими дополнительными ресурсами:

Практические работы

Видео

Просмотр контента