Метки контента позволяют пользователям с ограниченными возможностями распознавать элементы интерфейса при помощи сервисов специальных возможностей, например программ чтения с экрана.
Если информация передается в графическом виде, метки контента могут содержать текстовое описание элемента или связанного с ним действия.
Без меток контента некоторым пользователям будет сложно определять назначение элементов интерфейса и взаимодействовать с ними.
Реализация
ViewОпределенные типы представлений (View
) в интерфейсе должны содержать метки контента, указывающие на назначение таких представлений или связанные с ними действия.
Как присвоить метку
android:contentDescription
При использовании ImageView
, ImageButton
, CheckBox
или другого представления (View
), которое передает информацию в графическом виде, присваивайте метки контента для этого представления с помощью атрибута android:contentDescription
.
Некоторые метки контента зависят от информации, доступной только во время выполнения, или от значения представления (View
), меняющегося с течением времени. Например, во время прослушивания музыки назначение кнопки "Воспроизвести" меняется на "Приостановить". В этом случае используйте View#setContentDescription(CharSequence contentDescription)
, чтобы метка контента обновлялась в нужное время.
Как правило, сервис специальных возможностей описывает класс ViewGroup
, совмещая метки контента дочерних представлений (View
). Чтобы переопределить это правило и добавить собственное описание объекта, а также его неактивных дочерних представлений (View
), задайте атрибут contentDescription
в классе ViewGroup
. При этом вам потребуется включить метки контента дочерних представлений (View
) в атрибут contentDescription
для ViewGroup
.
android:hint
Чтобы указать назначение текстового поля, используйте атрибут android:hint
для EditTexts
или редактируемых объектов TextViews
. Не используйте атрибут android:contentDescription
в качестве метки контента для редактируемых представлений (Views
).
android:labelFor
Атрибут android:labelFor
указывает, что представление (View
) должно выполнять функцию метки контента для другого представления (View
).
Случаи, в которых не требуются метки контента
Метки контента не следует добавлять в следующих случаях:
- Текст, обрабатываемый в классе
TextView
или его подклассах, автоматически становится доступен программам чтения с экрана. При этом дополнительные метки контента не требуются. - Изображения не передают информацию в графическом виде или выполняют декоративную функцию. В этом случае задайте значение
"@null"
для атрибутаandroid:contentDescription
или"no"
для атрибутаandroid:importantForAccessibility
.
Дополнительную информацию о добавлении меток контента можно найти в обучающем курсе для разработчиков Android и руководстве по использованию API.
Определенные типы компонентов в интерфейсе должны содержать метки контента, указывающие на назначение таких компонентов или связанные с ними действия.
Как присвоить метку
Описания контента
Чтобы присвоить метку контента Image
, Icon
или другому компоненту низкого уровня, который передает информацию в графическом виде, задайте описание контента.
- Метка контента может зависеть от информации, доступной во время выполнения, а значение компонента может меняться. Например, во время прослушивания музыки назначение кнопки "Воспроизвести" меняется на "Приостановить".
- В этом случае используйте отслеживание состояния, чтобы инструмент Compose мог наблюдать изменения в описании контента и перекомпоновать его с новым значением. Подробнее о состоянии и Jetpack Compose…
- В некоторых случаях вам может потребоваться объединить элементы в один фокусируемый элемент, который соединяет между собой метки контента его дочерних элементов. Подробнее о том, как объединять элементы…
Параметр метки
Некоторые компоненты, например TextField
, поддерживают необязательный параметр метки
. Когда метка установлена, элемент показывает компонент, переданный метке
. Сервисы специальных возможностей можно использовать для описания компонента.
Случаи, в которых не требуются метки контента
Метки контента не следует добавлять в следующих случаях:
- Текст, обрабатываемый в классе
Text
или других компонентах, содержащихText
, автоматически становится доступен программам чтения с экрана. - Изображения не передают информацию в графическом виде или выполняют декоративную функцию.
- В этом случае задайте значение
null
для параметраcontentDescription
илиModifier.semantics#contentDescription
либо вызовитеModifier#clearAndSetSemantics
.
- В этом случае задайте значение
Дизайн
При разработке интерфейса уделите особое внимание меткам графического контента для пользователей с ограниченными возможностями. Метки контента должны соответствовать следующим принципам:
- кратко и понятно описывать назначение элемента или связанное с ним действие;
- не включать в себя тип или состояние элемента;
- указывать не на внешний вид, а на назначение элементов, связанных с действиями;
- не содержать подробных инструкций по взаимодействию с элементом.
Дополнительная информация приведена в руководстве по внедрению Material Design.
Тестирование
Убедитесь, что в интерфейсе присутствуют все метки контента. Для этого вручную выполните следующие действия:
- Включите TalkBack.
- Запустите приложение.
- С помощью жестов последовательно выделяйте элементы на экране.
- Если TalkBack не озвучивает выделенный элемент или определяет его как "Без названия", значит метка контента отсутствует.
Пропущенные метки контента можно выявить в ходе автоматического тестирования. Чтобы проверить приложение на устройстве вручную, воспользуйтесь Сканером доступности. Для автоматического тестирования включите проверку доступности в Espresso и Robolectric.