TalkBack, Android Accessibility Suite paketinin bir parçası olan, Google’ın Android için yerleşik ekran okuyucusudur. Arayüz öğelerini seslendirir ve hareketlerle cihazı kontrol etmeyi sağlayarak görme engelli ve az gören kullanıcılara akıllı telefon işlevlerine tam erişim sunar. Google Accessibility Help (2025)’e göre, TalkBack çoğu Android cihazda önceden yüklüdür ve farklı ses motorlarıyla 30’dan fazla dili destekler.
Anahtar noktalar
TalkBack, Google tarafından geliştirilen ve Android Accessibility Suite’in bir parçası olan Android için bir ekran okuyucudur. Görme engelli kullanıcılar için sesli geri bildirim ve hareket kontrolü sağlar. TalkBack, akıllı telefonlarda, tabletlerde, Smart TV’lerde ve Wear OS çalıştıran giyilebilir cihazlarda çalışır.
TalkBack ilk olarak 2009’da Android 1.6 (Donut)’da ortaya çıktı. Başlangıçta ayrı bir projeydi, ancak Android 4.0 (Ice Cream Sandwich)’in piyasaya sürülmesiyle Android Accessibility Suite’in bir parçası haline geldi — Switch Access ve Select to Speak’i de içeren bir hizmetler seti. Android 10’dan itibaren TalkBack, Google Play hizmetlerine sahip tüm cihazlarda önceden yüklüdür; buna ortak cihazlar — Samsung, Xiaomi, Oppo ve diğerleri dahildir.
TalkBack, çeşitli ses motorlarıyla 30’dan fazla dili destekler: Google Text-to-Speech, Samsung TTS ve üçüncü taraf motorlar. Türkçe için Google TTS, doğal telaffuz ve doğru tonlama sağlar. Kullanıcı, TalkBack ayarlarında konuşma hızını, perdeyi ayarlayabilir ve ses cinsiyetini seçebilir.
TalkBack, AccessibilityService — uygulamaların arayüz durumu hakkında bilgi almasına ve programlama yoluyla etkileşim kurmasına izin veren Android’deki bir sistem mekanizması — temelinde çalışır. TalkBack etkinleştirildiğinde, tüm dokunma olaylarını yakalar ve bunları özel ekran okuyucu hareketlerine dönüştürür.
TalkBack çalışmasının anahtar unsuru erişilebilirlik odağıdır. Metin alanı vurgulaması olarak görünen standart giriş odağının aksine, erişilebilirlik odağı öğenin etrafında sarı bir çerçeve olarak görüntülenir ve TalkBack’i olmayan kullanıcılar için görünmez. Erişilebilirlik odağı bir öğeye geldiğinde, TalkBack içeriğini, türünü ve durumunu seslendirir.
Kullanıcı, erişilebilirlik odağını hareketlerle taşır: sağa kaydırma — sonraki öğe, sola kaydırma — önceki öğe. Öğeler, AccessibilityNodeInfo — Android’in her ekran için oluşturduğu erişilebilirlik ağacı — tarafından tanımlanan sırayla gözden geçirilir. Geliştirici, accessibilityTraversalBefore ve accessibilityTraversalAfter özellikleri aracılığıyla sırayı etkileyebilir; bu, özel düzenlere sahip karmaşık ekranlar için özellikle önemlidir.
Ekrandaki her View, erişilebilirlik ağacında bir düğümle temsil edilir — bir AccessibilityNodeInfo nesnesi. Bu nesne şunları içerir: öğenin metni (contentDescription veya görünüm metni), öğe türü (düğme, onay kutusu, giriş alanı), durum (etkin/devre dışı/seçili), ekrandaki konum ve mevcut eylemlerin listesi. TalkBack bu ağacı dolaşır ve her düğümü geçiş sırasına göre seslendirir.
Bir View’in metin içeriği yoksa (örneğin, açıklaması olmayan bir ImageView), TalkBack için görünmez hale gelir — kullanıcı varlığından haberdar olmaz. Bu sorunu çözmek için geliştirici contentDescription ayarlar — TalkBack’in sessizlik yerine söylediği bir metin açıklaması. Android ayrıca değişebilir durumdaki (İşaretli/işaretli değil) öğeler için stateDescription ve ipuçlu giriş alanları için hintText’i destekler.
TalkBack, standart Android hareketlerini özel ekran okuyucu hareketlerine dönüştürür. Çoğu işlem bir veya iki parmakla gerçekleştirilirken, üç parmak hareketleri genel eylemler için ayrılmıştır.
| Eylem | Hareket | Sonuç |
|---|---|---|
| Öğeyi seslendir | Tek dokunma | Öğenin adını ve türünü söyler |
| Etkinleştir | Çift dokunma | Düğmeye basma veya gezinme |
| Sonraki | Sağa kaydırma | Sonraki öğe |
| Önceki | Sola kaydırma | Önceki öğe |
| Kaydır | 2 parmak kaydırma | Liste kaydırma |
| TalkBack menüsü | Yukarı-sola kaydırma | Genel ayarlar menüsü |
Yukarı-sola kaydırma hareketi (L şeklinde kaydırma), kullanıcının konuşma hızını değiştirebileceği, ekran perdesini etkinleştirebileceği, bir eğitim başlatabileceği veya ayarları açabileceği genel TalkBack menüsünü açar. TalkBack ayrıca öğeler için bir bağlam menüsünü destekler: yukarı-sağa kaydırma, geçerli öğe için mevcut eylemlerin bir listesini açar (örneğin, bir metin alanı için “Kopyala”, “Yapıştır” veya bir sohbet mesajı için “Sil”).
Android, erişilebilirlik yapılandırması için zengin bir API sağlar. Temel seviye contentDescription’dır, ancak kaliteli TalkBack desteği için AccessibilityNodeInfo, AccessibilityDelegate ve LiveRegion ile çalışmak gerekir.
android:contentDescription özelliği, TalkBack için öğenin metin açıklamasını belirler. ImageView, ImageButton, FloatingActionButton ve metin içeriği olmayan herhangi bir özel View için zorunludur. Standart öğeler (TextView, Button) için contentDescription isteğe bağlıdır — TalkBack metni otomatik olarak okuyacaktır.
val avatarView = ImageView(this)
avatarView.contentDescription = "Kullanıcı avatarı"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Videoyu oynat"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
importantForAccessibility bayrağı, öğenin TalkBack için görünürlüğünü kontrol eder. NO değeri, öğeyi erişilebilirlik ağacından gizler — dekoratif görseller, göstergeler ve özel arka planlar için kullanışlıdır. YES değeri, metni olmasa bile öğeyi zorla geçişe dahil eder. NO’yu aşırı kullanmamak önemlidir: anlamsal olarak önemli öğeleri gizlemek, uygulamayı TalkBack kullanıcıları için erişilemez hale getirir.
Standart tıklama işleyicilerini kullanmayan özel View’ler için, erişilebilirlik olaylarını işleyen bir sınıf olan AccessibilityDelegate’in geçersiz kılınması gerekir. Temsilci, TalkBack’in bağlam menüsü aracılığıyla kullanıcıya sunacağı özel açıklamalar, öğe türleri ve mevcut eylem listelerini ayarlamaya izin verir.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Özel düğme"
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)
}
}
Örnekte, temsilci TalkBack’e öğenin bir düğme (className = Button) olduğunu bildirir ve TalkBack bağlam menüsünde görünecek özel bir “Paylaş” eylemi sağlar. performAccessibilityAction yöntemi, bu eylemin çağrılmasını işler. Bir temsilci olmadan, TalkBack özel View’i basit, etkileşimli olmayan bir alan olarak ele alır ve kullanıcı onunla etkileşime giremez.
Tam TalkBack desteği yalnızca contentDescription’u değil, aynı zamanda odak yönetimini, dinamik güncellemeler için LiveRegion’u, ekran okuyucu etkinken test etmeyi ve farklı Android sürümlerine uyarlamayı da içerir.
Ekran içeriği, kullanıcının açık bir eylemi olmadan değiştiğinde (örneğin, yeni bir mesaj bildirimi görünür veya bir beğeni sayacı güncellenir), TalkBack bir bildirim almalıdır. Bunun için, XML’de bir View için android:accessibilityLiveRegion özelliği veya kodda setAccessibilityLiveRegion() yöntemi kullanılır. polite değeri, duyuruyu mevcut seslendirme bittikten sonra eklerken, assertive hemen keser.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// Metin güncellendiğinde TalkBack otomatik olarak
// değişikliği duyuracaktır
statusText.text = "Anna’dan yeni mesaj"
// Kritik bildirimler için — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion, iOS’taki UIAccessibility.post’un Android karşılığıdır. Çoğu güncelleme için (yeni mesajlar, durum güncellemeleri) polite kullanın ve assertive’i yalnızca kritik hatalar için (başarısız ödeme, bağlantı kaybı) kullanın. Assertive’in aşırı kullanımı olumsuz bir kullanıcı deneyimi yaratır — TalkBack sürekli olarak mevcut seslendirmeyi kesecektir.
Birden çok View’in tek bir mantıksal birim oluşturduğu karmaşık ekranlar için, gezinmeyi geçersiz kılmak üzere AccessibilityNodeProvider veya focusSearch kullanılır. Örneğin, 42 hücreli (6 hafta × 7 gün) özel bir takvim, kullanıcıyı sonraki bloğa ulaşmak için 42 öğenin tamamını kaydırmaya zorlamamalıdır. Geliştirici, hücreleri mantıksal birimler halinde gruplayabilir: ay → hafta → gün.
Jetpack Compose için .semantics {} değiştiricisi benzer bir API sağlar: contentDescription, liveRegion, stateDescription, disabled ve customActions. Compose ayrıca alt anlamları tek bir anlamda birleştirmek için mergeDescendants’ı destekler ve her View için manuel accessibilityDelegate yapılandırması olmadan öğe gruplamayı basitleştirir.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Mesaj gönder")
stateDescription("Göndermeye hazır")
}
) {
Icon(Icons.Filled.Send, "Gönder")
}
TalkBack testi, hizmet etkinken fiziksel bir cihaz veya öykünücü kullanılarak yapılır. Ekran kapalıyken (Screen Curtain) temel kullanıcı senaryolarının gözden geçirilmesi önerilir — bu, görsel geri bildirimin tamamen yokluğunu simüle eder. Android ayrıca Accessibility Scanner sağlar — contentDescription’ı olmayan öğeleri, çok küçük dokunma hedeflerini ve düşük kontrastı vurgulayan, erişilebilirlik sorunlarını otomatik olarak algılayan bir araç.
Sıkça sorulan sorular
Ayarlar → Erişilebilirlik → TalkBack → Aç. Hızlı açma için, her iki ses düğmesine aynı anda 3 saniye basın. Google Assistant ayrıca “TalkBack’i aç” sesli komutuyla TalkBack’i açabilir.”
TalkBack Android için bir ekran okuyucudur, VoiceOver iOS içindir. TalkBack AccessibilityService ve sarı çerçeveli erişilebilirlik odağını kullanırken, VoiceOver UIAccessibility ve döner tekerleği kullanır. Hareketler ve menüler farklılık gösterir: TalkBack’in genel menü için L şeklinde kaydırmaları vardır.
Tüm ImageView ve özel öğeler için contentDescription ayarlayın. Dekoratif öğeleri gizlemek için importantForAccessibility kullanın. Dinamik güncellemeler için accessibilityLiveRegion yapılandırın ve Accessibility Scanner ile kontrol edin. Compose’da .semantics{} değiştiricisini kullanın.
Erişilebilirlik ağacındaki bir arayüz öğesini temsil eden bir nesnedir. Metin, tür, durum, konum ve bir eylem listesi içerir. TalkBack gezinme için bu ağacı dolaşır. Geliştirici, AccessibilityDelegate veya XML özellikleri aracılığıyla bunu değiştirebilir.
importantForAccessibility’i kontrol edin — NO olarak ayarlanmış olabilir. Metni olmayan öğeler için contentDescription’ın ayarlandığından emin olun. Özel View’ler için, onInitializeAccessibilityNodeInfo ile AccessibilityDelegate uygulayın. Teşhis için Accessibility Scanner kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun