TalkBack — Google tərəfindən Android üçün hazırlanmış, Android Accessibility Suite paketinə daxil olan quraşdırılmış ekran oxuyucusudur (screen reader). O, interfeys elementlərini səsləndirir və cihazı jestlərlə idarə etməyə imkan verir, görmə qüsuru olan və zəif görən istifadəçilərə smartfon funksiyalarına tam giriş təmin edir. Google Accessibility Help (2025) məlumatına görə, TalkBack əksər Android cihazlarında əvvəlcədən quraşdırılıb və müxtəlif səs mühərrikləri ilə 30-dan çox dili dəstəkləyir.
Əsas məqamlar
TalkBack — Google tərəfindən hazırlanmış və Android Accessibility Suite-ə daxil olan Android üçün ekran oxuyucusudur (screen reader). O, görmə qüsuru olan istifadəçilər üçün səs rəyi və jest idarəetməsi təmin edir. TalkBack həm smartfonlarda, həm də planşetlərdə, Smart TV və Wear OS-də geyilən cihazlarda işləyə bilər.
TalkBack ilk dəfə 2009-cu ildə Android 1.6 (Donut) ilə ortaya çıxdı. Əvvəlcə bu ayrı bir layihə idi, lakin Android 4.0 (Ice Cream Sandwich) buraxılışı ilə o, Switch Access və Select to Speak-i də əhatə edən Android Accessibility Suite-in bir hissəsi oldu. Android 10-dan başlayaraq, TalkBack Google Play xidmətləri olan bütün cihazlarda, o cümlədən Samsung, Xiaomi, Oppo və digər tərəfdaş cihazlarında əvvəlcədən quraşdırılır.
TalkBack müxtəlif səs mühərrikləri ilə 30-dan çox dili dəstəkləyir: Google Text-to-Speech, Samsung TTS və üçüncü tərəf mühərrikləri. Azərbaycan dili üçün təbii tələffüz və düzgün intonasiya təmin edən Google TTS səs mühərriki istifadə olunur. İstifadəçi danışıq sürətini, ton hündürlüyünü tənzimləyə və TalkBack parametrlərində səsin cinsini seçə bilər.
TalkBack əlçatanlıq xidməti (AccessibilityService) — Android-in interfeysin vəziyyəti haqqında məlumat almağa və onunla proqramlı şəkildə qarşılıqlı əlaqəyə imkan verən sistem mexanizmi əsasında işləyir. TalkBack aktiv olduqda, o, bütün toxunma hadisələrini ələ keçirir və onları ekran oxuyucusunun xüsusi jestlərinə çevirir.
TalkBack-in işinin əsas elementi əlçatanlıq fokusudur (accessibility focus). Mətn sahəsinin vurğulanması kimi görünən standart giriş fokusundan fərqli olaraq, əlçatanlıq fokusu elementin ətrafında sarı çərçivə kimi göstərilir və TalkBack olmadan istifadəçi üçün görünməzdir. Əlçatanlıq fokusu elementə düşdükdə, TalkBack onun məzmununu, növünü və vəziyyətini səsləndirir.
İstifadəçi əlçatanlıq fokusunu jestlərlə hərəkət etdirir: sağa sürüşdürmə — növbəti element, sola sürüşdürmə — əvvəlki element. Elementlər AccessibilityNodeInfo — Android-in hər ekran üçün qurduğu əlçatanlıq ağacı tərəfindən müəyyən edilmiş ardıcıllıqla gəzilir. Tərtibatçı accessibilityTraversalBefore və accessibilityTraversalAfter xüsusiyyətləri vasitəsilə sıraya təsir edə bilər ki, bu da xüsusilə fərdi düzənli mürəkkəb ekranlar üçün vacibdir.
Ekrandakı hər View əlçatanlıq ağacında bir qovşaq — AccessibilityNodeInfo obyekti ilə təmsil olunur. Bu obyekt daxildir: elementin mətni (contentDescription və ya view mətni), elementin növü (düymə, qeyd qutusu, daxiletmə sahəsi), vəziyyəti (aktiv/deaktiv/seçilmiş), ekrandakı mövqe və mövcud hərəkətlərin siyahısı. TalkBack bu ağacı gəzir və hər qovşağı gəzinti ardıcıllığı ilə səsləndirir.
View-in mətn məzmunu yoxdursa (məsələn, təsvirsiz ImageView), TalkBack üçün görünməz olur — istifadəçi onun mövcudluğundan xəbərsiz qalır. Bu problemi həll etmək üçün tərtibatçı contentDescription — TalkBack-in boşluq əvəzinə səsləndirəcəyi mətn təsvirini təyin edir. Android həmçinin dəyişən vəziyyəti olan elementlər üçün stateDescription (seçilmiş/seçilməmiş) və işarəsi olan daxiletmə sahələri üçün hintText-i dəstəkləyir.
TalkBack standart Android jestlərini ekran oxuyucusunun xüsusi jestlərinə çevirir. Əməliyyatların çoxu bir və ya iki barmaqla yerinə yetirilir, üç barmaqlı jestlər isə qlobal hərəkətlər üçün ayrılıb.
| Hərəkət | Jest | Nəticə |
|---|---|---|
| Elementi səsləndir | 1 barmaqla toxunma | Elementin adını və növünü deyir |
| Aktivləşdir | İkiqat toxunma | Düyməyə basma və ya keçid |
| Növbəti | Sağa sürüşdürmə | Növbəti element |
| Əvvəlki | Sola sürüşdürmə | Əvvəlki element |
| Sürüşdürmə | 2 barmaq sürüşdürmə | Siyahını sürüşdürmə |
| TalkBack menyusu | Yuxarı-sola sürüşdürmə | Qlobal parametrlər menyusu |
„Yuxarı-sola sürüşdürmə“ jesti (L formalı sürüşdürmə) TalkBack-in qlobal menyusunu açır, burada istifadəçi danışıq sürətini dəyişə, ekran pərdəsini aktivləşdirə, təlimatı işə sala və ya parametrləri aça bilər. TalkBack həmçinin elementlər üçün kontekst menyusunu dəstəkləyir: yuxarı-sağa sürüşdürmə cari element üçün mövcud hərəkətlərin siyahısını açır (məsələn, mətn sahəsi üçün „kopyala“, „yapışdır“ və ya söhbət mesajı üçün „sil“).
Android əlçatanlığı konfiqurasiya etmək üçün zəngin API təqdim edir. Əsas səviyyə contentDescription-dir, lakin TalkBack-in keyfiyyətli dəstəyi üçün AccessibilityNodeInfo, AccessibilityDelegate və LiveRegion ilə iş tələb olunur.
android:contentDescription atributu TalkBack üçün elementin mətn təsvirini təyin edir. ImageView, ImageButton, FloatingActionButton və mətn məzmunu olmayan istənilən fərdi View üçün məcburidir. Standart elementlər (TextView, Button) üçün contentDescription isteğe bağlıdır — TalkBack mətni avtomatik oxuyacaq.
val avatarView = ImageView(this)
avatarView.contentDescription = "İstifadəçi avatari"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Videonu oynat"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
importantForAccessibility bayrağı elementin TalkBack üçün görünməsini idarə edir. NO dəyəri elementi əlçatanlıq ağacından gizlədir — dekorativ şəkillər, göstəricilər və fərdi fonlar üçün faydalıdır. YES dəyəri elementi mətn olmasa belə, gəzintiyə məcburi daxil edir. NO-dan sui-istifadə etməmək vacibdir: semantik əhəmiyyətli elementlərin gizlədilməsi tətbiqi TalkBack istifadəçiləri üçün əlçatmaz edir.
Standart klik işləyicilərindən istifadə etməyən fərdi View-lər üçün əlçatanlıq hadisələrini emal edən AccessibilityDelegate sinfini ləğv etmək lazımdır. Deleqat fərdi təsvir, element növü və TalkBack-in kontekst menyusunda istifadəçiyə təklif edəcəyi mövcud hərəkətlərin siyahısını təyin etməyə imkan verir.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Fərdi düymə"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Paylaş"
)
)
}
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)
}
}
Nümunədə deleqat TalkBack-ə elementin düymə olduğunu bildirir (className = Button) və TalkBack-in kontekst menyusunda görünəcək „Paylaş“ fərdi hərəkətini təqdim edir. performAccessibilityAction metodu bu hərəkətin çağırılmasını idarə edir. Deleqat olmadan TalkBack fərdi View-i qarşılıqlı əlaqəsi olmayan sadə sahə kimi qəbul edər və istifadəçi onunla qarşılıqlı əlaqə qura bilməzdi.
TalkBack-in tam dəstəyi yalnız contentDescription deyil, həm də fokus idarəsi, dinamik yeniləmələr üçün LiveRegion, aktiv ekran oxuyucusu ilə sınaq və müxtəlif Android versiyalarına uyğunlaşmanı əhatə edir.
Ekran məzmunu istifadəçinin aşkar hərəkəti olmadan dəyişdikdə (məsələn, yeni mesaj bildirişi və ya bəyənmə sayğacı yeniləndikdə), TalkBack bildiriş almalıdır. Bunun üçün XML-də View üçün android:accessibilityLiveRegion atributu və ya kodda setAccessibilityLiveRegion() metodu istifadə olunur. polite dəyəri cari səsləndirmə bitdikdən sonra elan əlavə edir, assertive dəyəri isə dərhal onu kəsir.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// Mətn yeniləndikdə TalkBack avtomatik
// dəyişikliyi elan edəcək
statusText.text = "Annanın yeni mesajı"
// Kritik bildirişlər üçün — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion — iOS-da UIAccessibility.post-un analoqudur. Əksər yeniləmələr üçün polite (yeni mesajlar, status yeniləmə) və yalnız kritik səhvlər üçün assertive (uğursuz ödəniş, əlaqənin itirilməsi) istifadə edin. Assertive-in həddindən artıq istifadəsi mənfi istifadəçi təcrübəsi yaradır — TalkBack daima cari səsləndirməni kəsəcək.
Bir neçə View-in bir məntiqi vahid təşkil etdiyi mürəkkəb ekranlar üçün naviqasiyanı ləğv etmək üçün AccessibilityNodeProvider və ya focusSearch istifadə olunur. Məsələn, 42 xanadan ibarət fərdi təqvim (6 həftə × 7 gün) istifadəçini növbəti bloka keçmək üçün bütün 42 elementi sürüşdürməyə məcbur etməməlidir. Tərtibatçı xanaları məntiqi qruplara birləşdirə bilər: ay → həftə → gün.
Jetpack Compose üçün oxşar API təmin edən .semantics {} modifikatoru istifadə olunur: contentDescription, liveRegion, stateDescription, disabled və customActions. Compose həmçinin uşaq semantikalarını birinə birləşdirmək üçün mergeDescendants-ı dəstəkləyir ki, bu da hər View üçün əl ilə accessibilityDelegate konfiqurasiyası olmadan elementlərin qruplaşdırılmasını sadələşdirir.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Mesaj göndər")
stateDescription("Göndərməyə hazırdır")
}
) {
Icon(Icons.Filled.Send, "Göndər")
}
TalkBack-in sınağı fiziki cihaz və ya xidmət aktivləşdirilmiş emulyator vasitəsilə aparılır. Ekran söndürülmüş (Screen Curtain) vəziyyətdə əsas istifadəçi ssenarilərini keçmək tövsiyə olunur — bu, vizual rəyin tam olmamasını simulyasiya edir. Android həmçinin əlçatanlıq problemlərini avtomatik aşkar etmək üçün Accessibility Scanner alətini təqdim edir ki, bu da contentDescription olmayan elementləri, çox kiçik toxunma sahələrini və aşağı kontrastı vurğulayır.
Tez-tez verilən suallar
Parametrlər → Əlçatanlıq → TalkBack → Yandır. Sürətli yandırma üçün hər iki səs düyməsini eyni anda 3 saniyə basmaq istifadə olunur. Google Assistant həmçinin „TalkBack-i yandır“ səs əmri ilə TalkBack-i aktivləşdirə bilər.
TalkBack Android üçün ekran oxuyucusu, VoiceOver isə iOS üçündür. TalkBack AccessibilityService və sarı çərçivəli əlçatanlıq fokusundan istifadə edir, VoiceOver isə UIAccessibility və rotordan. Jestlər və menyular fərqlidir: TalkBack-də qlobal menyu üçün L formalı sürüşdürmələr var.
Bütün ImageView və fərdi elementlər üçün contentDescription təyin edin. Dekorativ elementləri gizlətmək üçün importantForAccessibility istifadə edin. Dinamik yeniləmələr üçün accessibilityLiveRegion konfiqurasiya edin və Accessibility Scanner vasitəsilə yoxlayın. Compose-da .semantics{} modifikatorundan istifadə edin.
Bu, əlçatanlıq ağacında interfeys elementini təmsil edən obyektdir. Mətn, növ, vəziyyət, mövqe və hərəkətlər siyahısını ehtiva edir. TalkBack naviqasiya üçün bu ağacı gəzir. Tərtibatçı onu AccessibilityDelegate və ya XML-də atributlar vasitəsilə dəyişə bilər.
importantForAccessibility-i yoxlayın — ola bilsin ki, NO təyin olunub. Mətnsiz elementlər üçün contentDescription-in təyin olunduğuna əmin olun. Fərdi View-lər üçün onInitializeAccessibilityNodeInfo ilə AccessibilityDelegate tətbiq edin. Diaqnostika üçün Accessibility Scanner istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun