TalkBack — co to jest, gesty sterowania i konfiguracja na Android

Autor: IT Sectr Opublikowano: 2026-05-15 Czas czytania: 8 min

TalkBack — wbudowany czytnik ekranowy (screen reader) firmy Google dla systemu Android, wchodzący w skład pakietu Android Accessibility Suite. Odczytuje elementy interfejsu i umożliwia sterowanie urządzeniem za pomocą gestów, zapewniając niewidomym i słabowidzącym użytkownikom pełny dostęp do funkcji smartfona. Według Google Accessibility Help (2025), TalkBack jest preinstalowany na większości urządzeń z Androidem i obsługuje ponad 30 języków z różnymi silnikami głosowymi.

Najważniejsze

  • TalkBack — wbudowany czytnik ekranowy Google dla Androida ze sterowaniem gestami i informacją głosową
  • Fokus dostępności podświetla element, który TalkBack aktualnie odczytuje, żółtą ramką
  • Gesty obejmują dotknięcie (odczytanie), podwójne dotknięcie (aktywacja) i przesunięcie trzema palcami
  • Programiści konfigurują dostępność przez contentDescription i AccessibilityNodeInfo
  • TalkBack integruje się z Google Assistant i wyświetlaczami brajlowskimi

Czym jest TalkBack?

TalkBack — to czytnik ekranowy (screen reader) dla Androida, opracowany przez Google i wchodzący w skład Android Accessibility Suite. Zapewnia informację głosową i sterowanie gestami dla użytkowników z zaburzeniami wzroku. TalkBack może działać zarówno na smartfonach, jak i tabletach, Smart TV oraz urządzeniach noszonych na Wear OS.

TalkBack po raz pierwszy pojawił się w Android 1.6 (Donut) w 2009 roku. Początkowo był to osobny projekt, ale wraz z wydaniem Android 4.0 (Ice Cream Sandwich) stał się częścią Android Accessibility Suite — zestawu usług obejmującego również Switch Access i Select to Speak. Od Androida 10 TalkBack jest preinstalowany na wszystkich urządzeniach z usługami Google Play, w tym u partnerów — Samsung, Xiaomi, Oppo i innych.

TalkBack obsługuje ponad 30 języków z różnymi silnikami głosowymi: Google Text-to-Speech, Samsung TTS i innymi. Dla języka polskiego używany jest silnik głosowy Google TTS, który zapewnia naturalną wymowę i prawidłową intonację. Użytkownik może dostosować szybkość mowy, wysokość tonu i wybrać płeć głosu w ustawieniach TalkBack.

Jak działa TalkBack?

TalkBack działa w oparciu o usługę dostępności (AccessibilityService) — mechanizm systemowy Androida, który pozwala aplikacjom uzyskiwać informacje o stanie interfejsu i programowo z nim współdziałać. Gdy TalkBack jest włączony, przechwytuje wszystkie zdarzenia dotknięcia i przekształca je w specjalne gesty czytnika ekranowego.

Fokus dostępności

Kluczowym elementem działania TalkBack jest fokus dostępności (accessibility focus). W przeciwieństwie do standardowego fokusa wejścia, który jest widoczny jako podświetlenie pola tekstowego, fokus dostępności wyświetlany jest żółtą ramką wokół elementu i jest niewidoczny dla użytkownika bez TalkBack. Gdy fokus dostępności trafi na element, TalkBack odczytuje jego zawartość, typ i stan.

Użytkownik przesuwa fokus dostępności gestami: przesunięcie w prawo — następny element, przesunięcie w lewo — poprzedni. Elementy są przeglądane w kolejności określonej przez AccessibilityNodeInfo — drzewo dostępności, które Android buduje dla każdego ekranu. Programista może wpływać na kolejność poprzez właściwości accessibilityTraversalBefore i accessibilityTraversalAfter, co jest szczególnie ważne w przypadku złożonych ekranów z niestandardowym układem.

AccessibilityNodeInfo i drzewo dostępności

Każdy View na ekranie jest reprezentowany przez węzeł w drzewie dostępności — obiekt AccessibilityNodeInfo. Ten obiekt zawiera: tekst elementu (contentDescription lub tekst widoku), typ elementu (przycisk, pole wyboru, pole wprowadzania), stan (włączony/wyłączony/zaznaczony), pozycję na ekranie oraz listę dostępnych akcji. TalkBack przegląda to drzewo i odczytuje każdy węzeł w kolejności przeglądania.

Jeśli View nie ma zawartości tekstowej (np. ImageView bez opisu), staje się niewidoczny dla TalkBack — użytkownik nie dowie się o jego istnieniu. Aby rozwiązać ten problem, programista ustawia contentDescription — tekstowy opis, który TalkBack wypowiada zamiast pustki. Android obsługuje również stateDescription dla elementów ze zmiennym stanem (zaznaczony/niezaznaczony) oraz hintText dla pól wprowadzania z podpowiedzią.

Gesty sterowania TalkBack

TalkBack przekształca standardowe gesty Androida w specjalne gesty czytnika ekranowego. Większość operacji wykonuje się jednym lub dwoma palcami, przy czym gesty trzema palcami są zarezerwowane dla działań globalnych.

AkcjaGestyRezultat
Odczytaj elementDotknięcie 1 palcemWypowiada nazwę i typ elementu
AktywujPodwójne dotknięcieNaciśnięcie przycisku lub przejście
NastępnyPrzesunięcie w prawoNastępny element
PoprzedniPrzesunięcie w lewoPoprzedni element
Przewijanie2 palce przesunięciePrzewijanie listy
Menu TalkBackPrzesunięcie w górę-w lewoGlobalne menu ustawień

Gesty „przesunięcie w górę-w lewo” (przesunięcie w kształcie L) otwiera globalne menu TalkBack, w którym użytkownik może zmienić szybkość mowy, włączyć przesłonę ekranu, uruchomić samouczek lub otworzyć ustawienia. TalkBack obsługuje również menu kontekstowe dla elementów: przesunięcie w górę-w prawo otwiera listę dostępnych akcji dla bieżącego elementu (np. „kopiuj”, „wklej” dla pola tekstowego lub „usuń” dla wiadomości na czacie).

TalkBack w programowaniu mobilnym

Android udostępnia bogate API do konfiguracji dostępności. Podstawowym poziomem jest contentDescription, ale dla wysokiej jakości obsługi TalkBack wymagana jest praca z AccessibilityNodeInfo, AccessibilityDelegate i LiveRegion.

ContentDescription i ważne atrybuty

Atrybut android:contentDescription ustawia tekstowy opis elementu dla TalkBack. Jest obowiązkowy dla ImageView, ImageButton, FloatingActionButton i wszelkich niestandardowych widoków bez zawartości tekstowej. Dla standardowych elementów (TextView, Button) contentDescription jest opcjonalny — TalkBack odczyta tekst automatycznie.

kotlin
val avatarView = ImageView(this)
avatarView.contentDescription = "Awatar użytkownika"
avatarView.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_YES

val playButton = ImageButton(this)
playButton.contentDescription = "Odtwórz wideo"

val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_NO

Flaga importantForAccessibility steruje widocznością elementu dla TalkBack. Wartość NO ukrywa element z drzewa dostępności — przydatne dla dekoracyjnych obrazów, wskaźników i niestandardowych teł. Wartość YES wymusza włączenie elementu do przeglądania, nawet jeśli nie ma tekstu. Ważne, aby nie nadużywać NO: ukrywanie semantycznie ważnych elementów czyni aplikację niedostępną dla użytkowników TalkBack.

AccessibilityDelegate i akcje niestandardowe

Dla niestandardowych widoków, które nie używają standardowych procedur obsługi kliknięć, należy przesłonić AccessibilityDelegate — klasę obsługującą zdarzenia dostępności. Delegat umożliwia ustawienie niestandardowego opisu, typu elementu i listy dostępnych akcji, które TalkBack zaproponuje użytkownikowi w menu kontekstowym.

kotlin
class CustomButtonDelegate : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfoCompat
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "Niestandardowy przycisk"
        info.className = Button::class.java.name
        info.addAction(
            AccessibilityNodeInfoCompat.AccessibilityActionCompat(
                R.id.custom_action, "Udostępnij"
            )
        )
    }

    override fun performAccessibilityAction(
        host: View, action: Int, args: Bundle?
    ): Boolean {
        if (action == R.id.custom_action) {
            shareContent()
            return true
        }
        return super.performAccessibilityAction(host, action, args)
    }
}

W przykładzie delegate informuje TalkBack, że element jest przyciskiem (className = Button) i udostępnia niestandardową akcję „Udostępnij”, która pojawi się w menu kontekstowym TalkBack. Metoda performAccessibilityAction obsługuje wywołanie tej akcji. Bez delegata TalkBack odebrałby niestandardowy widok jako zwykły obszar bez interaktywności, a użytkownik nie mógłby z nim współdziałać.

Konfiguracja dostępności dla TalkBack

Pełna obsługa TalkBack obejmuje nie tylko contentDescription, ale także zarządzanie fokusem, LiveRegion dla dynamicznych aktualizacji, testowanie z włączonym czytnikiem ekranowym i dostosowanie do różnych wersji Androida.

LiveRegion dla dynamicznej treści

Gdy zawartość ekranu zmienia się bez jawnego działania użytkownika (np. pojawia się powiadomienie o nowej wiadomości lub aktualizuje się licznik polubień), TalkBack powinien otrzymać powiadomienie. W tym celu używa się atrybutu android:accessibilityLiveRegion dla View w XML lub metody setAccessibilityLiveRegion() w kodzie. Wartość polite dodaje ogłoszenie po zakończeniu bieżącego odczytywania, a wartość assertive natychmiast je przerywa.

kotlin
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_POLITE

// Po aktualizacji tekstu TalkBack automatycznie
// ogłosi zmianę
statusText.text = "Nowa wiadomość od Anny"

// W przypadku krytycznych powiadomień — assertive
errorBanner.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE

LiveRegion — to odpowiednik UIAccessibility.post na iOS. Używaj polite dla większości aktualizacji (nowe wiadomości, aktualizacja statusu) i assertive tylko dla krytycznych błędów (nieudana płatność, utrata połączenia). Nadmierne użycie assertive tworzy negatywne doświadczenie użytkownika — TalkBack będzie stale przerywać bieżące odczytywanie.

Grupowanie i dostawcy dostępności

W przypadku złożonych ekranów, gdzie kilka widoków tworzy jedną logiczną jednostkę, używa się AccessibilityNodeProvider lub focusSearch do nadpisania nawigacji. Na przykład niestandardowy kalendarz z 42 komórkami (6 tygodni × 7 dni) nie powinien zmuszać użytkownika do przewijania wszystkich 42 elementów, aby przejść do następnego bloku. Programista może połączyć komórki w logiczne grupy: miesiąc → tydzień → dzień.

Dla Jetpack Compose używany jest modyfikator .semantics {}, który udostępnia podobne API: contentDescription, liveRegion, stateDescription, disabled i customActions. Compose obsługuje również mergeDescendants do łączenia semantyk potomnych w jedną, co upraszcza grupowanie elementów bez ręcznej konfiguracji accessibilityDelegate dla każdego widoku.

kotlin
Button(
    onClick = { sendMessage() },
    modifier = Modifier.semantics {
        contentDescription("Wyślij wiadomość")
        stateDescription("Gotowe do wysłania")
    }
) {
    Icon(Icons.Filled.Send, "Wyślij")
}

Testowanie TalkBack wykonuje się przez fizyczne urządzenie lub emulator z włączoną usługą. Zaleca się przejście kluczowych scenariuszy użytkownika z wyłączonym ekranem (Screen Curtain) — to symuluje całkowity brak wizualnej informacji zwrotnej. Android udostępnia również Accessibility Scanner — narzędzie do automatycznego wykrywania problemów z dostępnością, które podświetla elementy bez contentDescription, zbyt małe obszary dotyku i niski kontrast.

Często zadawane pytania

Jak włączyć TalkBack na Android?

Ustawienia → Dostępność → TalkBack → Włącz. Do szybkiego włączenia używa się jednoczesnego naciśnięcia obu klawiszy głośności na 3 sekundy. Google Assistant może również włączyć TalkBack za pomocą komendy głosowej „Włącz TalkBack”.

Czym TalkBack różni się od VoiceOver?

TalkBack — czytnik ekranowy dla Androida, VoiceOver — dla iOS. TalkBack używa AccessibilityService i fokusa dostępności z żółtą ramką, a VoiceOver — UIAccessibility i rotora. Gesty i menu różnią się: TalkBack ma przesunięcia w kształcie L dla menu globalnego.

Jak sprawić, by aplikacja była zgodna z TalkBack?

Ustaw contentDescription dla wszystkich ImageView i elementów niestandardowych. Użyj importantForAccessibility do ukrywania elementów dekoracyjnych. Skonfiguruj accessibilityLiveRegion dla dynamicznych aktualizacji i sprawdź przez Accessibility Scanner. W Compose stosuj modyfikator .semantics{}.

Czym jest AccessibilityNodeInfo?

To obiekt reprezentujący element interfejsu w drzewie dostępności. Zawiera tekst, typ, stan, pozycję i listę akcji. TalkBack przegląda to drzewo do nawigacji. Programista może je modyfikować przez AccessibilityDelegate lub atrybuty w XML.

Dlaczego TalkBack nie odczytuje mojego przycisku?

Sprawdź importantForAccessibility — być może jest ustawiony na NO. Upewnij się, że contentDescription jest ustawiony dla elementów bez tekstu. Dla niestandardowych widoków zaimplementuj AccessibilityDelegate z onInitializeAccessibilityNodeInfo. Użyj Accessibility Scanner do diagnostyki.

Podsumowanie

  • TalkBack — wbudowany czytnik ekranowy Android w Android Accessibility Suite ze sterowaniem gestami
  • Fokus dostępności z żółtą ramką oznacza bieżący odczytywany element na ekranie
  • AccessibilityService przechwytuje zdarzenia dotyku i przekształca je w gesty czytnika ekranowego
  • Gesty TalkBack obejmują dotknięcie (odczytanie), podwójne dotknięcie (aktywacja) i przesunięcia w kształcie L (menu)
  • Programowanie przez contentDescription, AccessibilityDelegate, LiveRegion i semantics w Compose
  • Aktualizacje dynamiczne wymagają android:accessibilityLiveRegion do automatycznego ogłaszania zmian
  • Testowanie z Accessibility Scanner i Screen Curtain jest obowiązkowe dla wysokiej jakości obsługi

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również