Реализация поддержки TalkBack для Android-приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация поддержки TalkBack для Android-приложения
Средний
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация поддержки TalkBack для Android-приложения

TalkBack — screen reader для Android, аналог iOS VoiceOver. Включается через Settings → Accessibility → TalkBack или Volume Up + Volume Down долгим нажатием на большинстве устройств. При включённом TalkBack одиночный тап — фокус и озвучивание элемента, двойной тап — активация. Свайп вправо/влево — переход между элементами.

Что ломается без проработки

ContentDescription и ImportantForAccessibility

android:contentDescription — эквивалент accessibilityLabel на iOS. Для ImageView, ImageButton — обязателен. Для TextView TalkBack читает text автоматически. Декоративные изображения: android:importantForAccessibility="no" (XML) или ViewCompat.setImportantForAccessibility(view, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO) — TalkBack пропускает.

Частая ошибка в Compose: Icon(painter = painterResource(R.drawable.ic_close), contentDescription = null) — иконка недостижима для TalkBack, если она не завёрнута в кликабельный элемент с явным описанием. IconButton с contentDescription у Icon — правильно.

Группировка элементов

ViewGroup с android:focusable="true" и android:importantForAccessibility="yes" — TalkBack читает все дочерние элементы как один: contentDescription контейнера. Для карточки товара (изображение + название + цена + кнопка) — выгоднее сделать карточку одним accessible элементом с составным contentDescription через ViewCompat.setAccessibilityDelegate.

В Jetpack Compose: Modifier.semantics(mergeDescendants = true) { contentDescription = "Товар: $name, цена: $price" } — объединяет все дочерние элементы в один для TalkBack.

AccessibilityDelegate и кастомные действия

TalkBack по умолчанию объявляет стандартные действия: «Double-tap to activate». Кастомные действия (свайп по карточке → удалить, долгое нажатие → меню) нужно регистрировать явно:

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 }.

RecyclerView и фокус

TalkBack линейно обходит RecyclerView по элементам. Если RecyclerView вложен в ScrollView — фокус может застрять. RecyclerView не должен быть вложен в ScrollView: стандартная рекомендация Material Design и она же необходима для доступности.

Элемент RecyclerView с несколькими кликабельными зонами (например, карточка + кнопка «Добавить» внутри): убедиться, что TalkBack фокусируется на каждой зоне отдельно, а не только на корневом view. descendantFocusability="blocksDescendants" на корне ломает доступность дочерних кнопок.

Процесс аудита

Включаем TalkBack на реальном устройстве (не эмулятор — Samsung One UI и stock Android ведут себя по-разному). Проходим основные user flow. Фиксируем: элементы без описания, недостижимые зоны, неправильный порядок фокуса, отсутствие live regions для динамических данных.

Инструменты: Accessibility Scanner (Google Play) — визуально подсвечивает проблемы прямо поверх приложения. Android Studio Layout Inspector с Accessibility tab. Espresso с AccessibilityChecks для автоматизированного регрессионного тестирования:

@Before
fun setUp() {
    AccessibilityChecks.enable().setRunChecksFromRootView(true)
}

Срок: 3-5 дней. На Samsung устройствах нужно дополнительно проверять — One UI добавляет поверх TalkBack собственные жесты, которые конфликтуют с кастомными gesture recognizer'ами.