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

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

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

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

Как повысить видимость текста

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

  • Если размер текста меньше 18sp или если текст полужирный и его размер меньше 14sp, используйте цвета переднего плана и фона, которые обеспечивают коэффициент контрастности не менее 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)
        )
    }
}

Обратите внимание, что для Text компонуемых функций не нужно указывать contentDescription. Сервисы специальных возможностей Android (например, TalkBack) автоматически озвучивают текст.

При добавлении описаний элементов интерфейса приложения следуйте приведенным ниже рекомендациям.

  • Используйте описания, чтобы передать цель и результат взаимодействия, а не визуальные детали. Чтобы указать тип элемента интерфейса, используйте свойство семантики Role (например, Role.Button или Role.Switch). Это позволит программам чтения с экрана правильно озвучивать элемент.

  • Избегайте повторов в описаниях. Например, если при нажатии кнопки в приложении выполняется действие "Отправить", в описании кнопки нужно использовать значение "Submit", а не "Submit button".

  • Каждое описание должно быть уникальным. Таким образом, когда пользователь программы чтения с экрана сталкивается с повторяющимся описанием элемента, он понимает, что фокус находится на элементе, на котором он уже был ранее. В частности, каждый элемент списка, например LazyColumn, должен иметь уникальное описание, отражающее его содержание, например название города в списке местоположений.

  • Используйте API hideFromAccessibility, чтобы отмечать чисто декоративные элементы, которые могут игнорироваться сервисами специальных возможностей. Если у элемента интерфейса есть параметр contentDescription, но он носит исключительно декоративный характер (например, Icon, который является частью другого элемента интерфейса), передайте значение null, чтобы избежать избыточного добавления ярлыков. Более сложные варианты использования описаны в разделе Объединение и очистка.

  • Проверьте код, чтобы убедиться, что описание контента передается правильно. Android Lint, тестирование Compose и инструменты для ручного и автоматического тестирования могут выявить распространенные проблемы и ошибки в реализации.

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

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

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

Видео

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