TalkBack — уграђени екрански читач (screen reader) компаније Google за Android, који је део пакета Android Accessibility Suite. Он изговара елементе интерфејса и омогућава управљање уређајем помоћу гестова, пружајући слепим и слабовидим корисницима пун приступ функцијама паметног телефона. Према Google Accessibility Help (2025), TalkBack је прединсталиран на већини Android уређаја и подржава више од 30 језика са различитим гласовним покретачима.
Главно
TalkBack — је екрански читач (screen reader) за Android, развијен од стране Google-а и део Android Accessibility Suite-а. Он пружа гласовну повратну информацију и управљање гестовима за кориснике са оштећењем вида. TalkBack може да ради на паметним телефонима, таблетима, Smart TV-у и носивим уређајима са Wear OS.
TalkBack се први пут појавио у Android 1.6 (Donut) 2009. године. У почетку је то био засебан пројекат, али је изласком Android 4.0 (Ice Cream Sandwich) постао део Android Accessibility Suite — скупа услуга које такође укључују Switch Access и Select to Speak. Почевши од Android 10, TalkBack је прединсталиран на свим уређајима са Google Play услугама, укључујући уређаје партнера — Samsung, Xiaomi, Oppo и друге.
TalkBack подржава више од 30 језика са различитим гласовним покретачима: Google Text-to-Speech, Samsung TTS и независним. За српски језик користи се гласовни покретач Google TTS, који обезбеђује природан изговор и правилну интонацију. Корисник може подесити брзину говора, висину тона и изабрати пол гласа у подешавањима TalkBack-а.
TalkBack ради на основу услуге приступачности (AccessibilityService) — системског механизма Android-а који омогућава апликацијама да добијају информације о стању интерфејса и програмски интерагују са њим. Када је TalkBack укључен, он пресреће све догађаје додира и трансформише их у посебне гестове екранског читача.
Кључни елемент рада TalkBack-а — фокус приступачности (accessibility focus). За разлику од стандардног фокуса уноса, који је видљив као истицање текстуалног поља, фокус приступачности се приказује жутим оквиром око елемента и невидљив је за корисника без TalkBack-а. Када фокус приступачности дође до елемента, TalkBack изговара његов садржај, тип и стање.
Корисник помера фокус приступачности гестовима: превлачење удесно — следећи елемент, превлачење улево — претходни елемент. Елементи се обилазе редоследом који одређује AccessibilityNodeInfo — стабло приступачности које Android гради за сваки екран. Програмер може утицати на редослед кроз својства accessibilityTraversalBefore и accessibilityTraversalAfter, што је посебно важно за сложене екране са прилагођеним распоредом.
Сваки View на екрану представљен је чвором у стаблу приступачности — објектом AccessibilityNodeInfo. Овај објекат садржи: текст елемента (contentDescription или текст view-а), тип елемента (дугме, поље за потврду, поље за унос), стање (укључено/искључено/изабрано), позицију на екрану и листу доступних радњи. TalkBack обилази ово стабло и изговара сваки чвор редом.
Ако View нема текстуални садржај (нпр. ImageView без описа), постаје невидљив за TalkBack — корисник неће сазнати за његово постојање. Да би решио овај проблем, програмер поставља contentDescription — текстуални опис који TalkBack изговара уместо празнине. Android такође подржава stateDescription за елементе са променљивим стањем (изабрано/није изабрано) и hintText за поља за унос са назнаком.
TalkBack претвара стандардне Android гестове у посебне гестове екранског читача. Већина операција се изводи једним или два прста, при чему су гестови са три прста резервисани за глобалне радње.
| Радња | Гест | Резултат |
|---|---|---|
| Изговори елемент | Додир 1 прстом | Изговара назив и тип елемента |
| Активирај | Двоструки додир | Притисак дугмета или прелаз |
| Следећи | Превлачење удесно | Следећи елемент |
| Претходни | Превлачење улево | Претходни елемент |
| Померање | 2 прста превлачење | Померање листе |
| Мени TalkBack | Превлачење горе-лево | Глобални мени подешавања |
Гест „превлачење горе-лево“ (L-облика превлачење) отвара глобални мени TalkBack-а, где корисник може променити брзину говора, укључити екранску завесу, покренути туторијал или отворити подешавања. TalkBack такође подржава контекстуални мени за елементе: превлачење горе-десно отвара листу доступних радњи за тренутни елемент (нпр. „копирај“, „налепи“ за текстуално поље или „избриши“ за поруку у чету).
Android пружа богат API за подешавање приступачности. Основни ниво је contentDescription, али за квалитетну подршку TalkBack-а потребан је рад са AccessibilityNodeInfo, AccessibilityDelegate и LiveRegion.
Атрибут android:contentDescription поставља текстуални опис елемента за TalkBack. Обавезан је за ImageView, ImageButton, FloatingActionButton и све прилагођене View-ове без текстуалног садржаја. За стандардне елементе (TextView, Button) contentDescription је опционалан — TalkBack ће аутоматски прочитати текст.
val avatarView = ImageView(this)
avatarView.contentDescription = "Аватар корисника"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Репродукуј видео"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Заставица importantForAccessibility управља видљивошћу елемента за TalkBack. Вредност NO скрива елемент из стабла приступачности — корисно за декоративне слике, индикаторе и прилагођене позадине. Вредност YES присилно укључује елемент у обилазак, чак и ако нема текст. Важно је не злоупотребљавати NO: скривање семантички важних елемената чини апликацију недоступном за кориснике TalkBack-а.
За прилагођене View-ове који не користе стандардне обрађиваче кликова, потребно је премостити AccessibilityDelegate — класу која обрађује догађаје приступачности. Делегат омогућава постављање прилагођеног описа, типа елемента и листе доступних радњи које ће TalkBack понудити кориснику кроз контекстуални мени.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Прилагођено дугме"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Дели"
)
)
}
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)
}
}
У примеру, делегат обавештава TalkBack да је елемент дугме (className = Button) и пружа прилагођену радњу „Дели“, која ће се појавити у контекстуалном менију TalkBack-а. Метод performAccessibilityAction обрађује позивање ове радње. Без делегата, TalkBack би прилагођени View доживео као обичну област без интерактивности, и корисник не би могао да интерагује са њим.
Потпуна подршка TalkBack-а укључује не само contentDescription, већ и управљање фокусом, LiveRegion за динамичка ажурирања, тестирање са укљученим екранским читачем и прилагођавање различитим верзијама Android-а.
Када се садржај екрана мења без експлицитне радње корисника (нпр. појави се обавештење о новој поруци или се ажурира бројач лајкова), TalkBack треба да прими обавештење. За то се користи атрибут android:accessibilityLiveRegion за View у XML-у или метод setAccessibilityLiveRegion() у коду. Вредност polite додаје објаву након завршетка тренутног изговарања, а вредност assertive је одмах прекида.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// При ажурирању текста TalkBack ће аутоматски
// објавити промену
statusText.text = "Нова порука од Ане"
// За критична обавештења — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion — је аналог UIAccessibility.post на iOS-у. Користите polite за већину ажурирања (нове поруке, ажурирање статуса) и assertive само за критичне грешке (неуспешно плаћање, губитак везе). Прекомерна употреба assertive ствара негативно корисничко искуство — TalkBack ће стално прекидати тренутно изговарање.
За сложене екране где више View-ова чини једну логичку целину, користи се AccessibilityNodeProvider или focusSearch за премошћивање навигације. На пример, прилагођени календар са 42 ћелије (6 недеља × 7 дана) не би требало да приморава корисника да прелиста свих 42 елемента да би прешао на следећи блок. Програмер може спојити ћелије у логичке групе: месец → недеља → дан.
За Jetpack Compose користи се модификатор .semantics {}, који пружа сличан API: contentDescription, liveRegion, stateDescription, disabled и customActions. Compose такође подржава mergeDescendants за спајање подређених семантика у једну, што поједностављује груписање елемената без ручног подешавања accessibilityDelegate за сваки View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Пошаљи поруку")
stateDescription("Спремно за слање")
}
) {
Icon(Icons.Filled.Send, "Пошаљи")
}
Тестирање TalkBack-а се врши путем физичког уређаја или емулатора са укљученом услугом. Препоручује се пролазак кључних корисничких сценарија са искљученим екраном (Screen Curtain) — то симулира потпуни недостатак визуелне повратне информације. Android такође пружа Accessibility Scanner — алат за аутоматско откривање проблема приступачности, који истиче елементе без contentDescription, премале области додира и низак контраст.
Често постављана питања
Подешавања → Приступачност → TalkBack → Укључи. За брзо укључивање користи се истовремено притискање обе тастере јачине звука на 3 секунде. Google Assistant такође може укључити TalkBack гласовном командом „Укључи TalkBack“.
TalkBack — екрански читач за Android, VoiceOver — за iOS. TalkBack користи AccessibilityService и фокус приступачности са жутим оквиром, а VoiceOver — UIAccessibility и ротор. Гестови и менији се разликују: TalkBack има L-облика превлачења за глобални мени.
Поставите contentDescription за све ImageView и прилагођене елементе. Користите importantForAccessibility за скривање декоративних елемената. Подесите accessibilityLiveRegion за динамичка ажурирања и проверите путем Accessibility Scanner-а. У Compose-у примењујте модификатор .semantics{}.
То је објекат који представља елемент интерфејса у стаблу приступачности. Садржи текст, тип, стање, позицију и листу радњи. TalkBack обилази ово стабло за навигацију. Програмер га може мењати путем AccessibilityDelegate или атрибута у XML-у.
Проверите importantForAccessibility — могуће да је постављен на NO. Уверите се да је contentDescription постављен за елементе без текста. За прилагођене View-ове имплементирајте AccessibilityDelegate са onInitializeAccessibilityNodeInfo. Користите Accessibility Scanner за дијагностику.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође