Сделайте приложения более доступными

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

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

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

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

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

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

На следующем изображении показаны два примера цветового контраста текста и фона:

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

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

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

Кодлабс

Видео

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