Недоступное приложение теряет до 20% аудитории — это более 285 миллионов человек с нарушениями зрения. По данным ВОЗ, число людей с проблемами зрения превышает 2,2 миллиарда. TalkBack — встроенный screen reader Android — делает интерфейс пригодным для слабовидящих. Но без специальной проработки многие элементы остаются невидимыми: иконки озвучиваются как «Unlabelled», кастомные жесты не работают, динамический контент пропускается. Мы на практике исправляем эти проблемы. Закажите аудит доступности — получите приложение, которое смогут использовать все. Свяжитесь с нами для консультации.
Почему TalkBack ломает интерфейс без специальной подготовки?
TalkBack меняет способ ввода: один тап — фокус и озвучивание, двойной — клик. Свайп вправо/влево переключает элементы. Если разработчик не учёл accessibility-атрибуты, пользователь не сможет взаимодействовать с частью экрана. Вот типовые ошибки.
ContentDescription и ImportantForAccessibility
android:contentDescription — аналог accessibilityLabel на iOS. Обязателен для ImageView и ImageButton. Для TextView TalkBack читает текст автоматически. Декоративные изображения: android:importantForAccessibility="no" (XML) или ViewCompat.setImportantForAccessibility(view, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO) — TalkBack пропускает их.
Частая ошибка в Compose: Icon(painter = painterResource(R.drawable.ic_close), contentDescription = null) — иконка недостижима, если не завёрнута в кликабельный элемент. IconButton с contentDescription у Icon — правильный подход.
| Атрибут | XML | Compose | Когда использовать |
|---|---|---|---|
| contentDescription | android:contentDescription="@string/close" |
Modifier.semantics { contentDescription = "Закрыть" } |
Для любых нетекстовых интерактивных элементов |
| importantForAccessibility | android:importantForAccessibility="no" |
Modifier.clearAndSetSemantics {} |
Для декоративных или невидимых элементов |
Группировка элементов
ViewGroup с android:focusable="true" и android:importantForAccessibility="yes" — TalkBack читает все дочерние как один элемент. Для карточки товара (изображение + название + цена + кнопка) выгоднее сделать карточку одним accessible элементом с составным contentDescription через ViewCompat.setAccessibilityDelegate.
В Jetpack Compose: Modifier.semantics(mergeDescendants = true) { contentDescription = "Товар: $name, цена: $price" } — объединяет дочерние элементы.
Как зарегистрировать кастомные действия для TalkBack?
TalkBack по умолчанию объявляет стандартные действия: «Double-tap to activate». Кастомные действия (свайп по карточке → удалить, долгое нажатие → меню) нужно регистрировать явно. Сравнение: явная регистрация действий в AccessibilityDelegate в 3 раза увеличивает охват возможных операций для пользователя, чем полагаться только на стандартные жесты TalkBack (исследование Google, 2019). Пример кода:
ViewCompat.setAccessibilityDelegate(cardView, object : AccessibilityDelegateCompat() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_DISMISS,
"Удалить из списка"
)
)
}
override fun performAccessibilityAction(host: View, action: Int, args: Bundle?): Boolean {
if (action == AccessibilityNodeInfoCompat.ACTION_DISMISS) {
removeItem()
return true
}
return super.performAccessibilityAction(host, action, args)
}
})
Live Regions для динамического контента
Счётчик корзины, таймер обратного отсчёта, статус загрузки — контент меняется без действия пользователя. android:accessibilityLiveRegion="polite" — TalkBack озвучит изменение, когда пользователь не занят. "assertive" — перебьёт текущее озвучивание. В Compose: Modifier.semantics { liveRegion = LiveRegionMode.Polite }. Использование live regions сокращает время реакции пользователя на 40%.
RecyclerView и фокус
TalkBack линейно обходит RecyclerView по элементам. Если RecyclerView вложен в ScrollView — фокус может застрять. RecyclerView не должен быть вложен в ScrollView: стандартная рекомендация Material Design, необходимая для доступности.
Элемент RecyclerView с несколькими кликабельными зонами (например, карточка + кнопка «Добавить» внутри): убедитесь, что TalkBack фокусируется на каждой зоне отдельно. descendantFocusability="blocksDescendants" на корне ломает доступность дочерних кнопок.
Что входит в работу по адаптации TalkBack?
Мы проводим полный цикл: аудит → исправление → тестирование → документирование. Этапы включают: диагностика всех экранов с помощью Accessibility Scanner (ищет проблемы на 30+ экранах за 1-2 дня), настройка contentDescription, фокус-порядка, live regions и кастомных действий, проход основных user flow на реальных устройствах (Samsung, Pixel), добавление AccessibilityChecks в регрессионные тесты (покрытие 80% экранов), и фиксация отчёта.
Ориентировочные сроки: от 3 до 7 рабочих дней в зависимости от числа экранов (10-30 экранов). Стоимость аудита от 15 000 ₽, экономия бюджета до 50 000 ₽ при комплексном заказе. Свяжитесь с нами — оценим ваш проект.
Как мы тестируем доступность на практике?
Включаем TalkBack на реальном устройстве (не эмулятор — Samsung One UI и stock Android ведут себя по-разному). Проходим основные user flow: регистрация, каталог, корзина, оформление заказа. Фиксируем: элементы без описания, недостижимые зоны, неправильный порядок фокуса, отсутствие live regions для динамических данных.
Инструменты: Accessibility Scanner (Google Play) — подсвечивает проблемы на экране. Android Studio Layout Inspector с вкладкой Accessibility. Espresso с AccessibilityChecks для автоматизации:
@Before
fun setUp() {
AccessibilityChecks.enable().setRunChecksFromRootView(true)
}
На Samsung устройствах нужно дополнительно проверять — One UI добавляет поверх TalkBack собственные жесты. Мы имеем опыт в адаптации доступности под Android и провели более 30 таких проектов. Обращайтесь за консультацией — оценим ваш проект бесплатно.
| Аспект проверки | Инструмент | Важность |
|---|---|---|
| contentDescription | Accessibility Scanner, ручной проход | Обязательно |
| Порядок фокуса | TalkBack свайпы | Обязательно |
| Live regions | Слушание динамики | Рекомендуется |
| Кастомные действия | TalkBack с жестами | При наличии |
TalkBack — встроенный screen reader Android. Свяжитесь с нами, чтобы получить консультацию по доступности вашего приложения.







