Ekran Okuyucu (Screen Reader), metni ve grafik arayüz öğelerini konuşmaya veya Braille ekran çıktısına dönüştürerek görme engelli ve az gören kullanıcıların görsel kontrol olmadan bir cihazla etkileşime girmesini sağlayan bir programdır. Mobil platformlarda ana ekran okuyucular iOS'ta VoiceOver ve Android'de TalkBack'tir. Dünya Sağlık Örgütü'ne (2023) göre, Ekran Okuyucu dünya çapında 285 milyon görme engelli kişi için dijital teknolojiye erişimin ana aracıdır.
Önemli Noktalar
Ekran Okuyucu (Screen Reader), grafik kullanıcı arayüzünü yorumlayan ve sentezlenmiş konuşma veya dokunsal Braille ekran aracılığıyla görsel olmayan biçimde sunan bir yardımcı teknolojidir (Assistive Technology, AT). Ekran okuyucular, tam veya kısmi görme kaybı olan kişilerin bilgisayarlara ve mobil cihazlara erişmesinin ana yoludur.
İlk ekran okuyucular 1980'lerin sonunda MS-DOS için (örn. Vocal-Eyes) ve daha sonra Windows için (JAWS, NVDA) ortaya çıktı. Mobil platformlarda ekran okuyucular sistem düzeyinde entegre edildi: Apple, 2009'da iPhone 3GS'e VoiceOver'ı entegre etti, Google aynı yıl Android 1.6'ya TalkBack'i entegre etti. 2025 itibarıyla, neredeyse tüm modern akıllı telefonlarda ek yazılım kurulumu gerektirmeyen yerleşik bir ekran okuyucu bulunmaktadır.
Bir ekran okuyucu yalnızca ekrandaki metni okumaz — arayüz hiyerarşisini analiz eder, öğe türlerini (düğme, bağlantı, başlık, giriş alanı), durumlarını (etkin/devre dışı, seçili/seçili değil) ve ilişkilerini (ebeveyn-çocuk, grup) belirler. Bu bilgi, odak konumuna göre hücreleri gerçek zamanlı olarak güncelleyen bir Braille ekranın sesli ipuçları veya dokunsal duyumları aracılığıyla kullanıcıya iletilir.
Bir ekran okuyucu, işletim sistemiyle yakın işbirliği içinde çalışarak arayüzün dahili temsiline — Erişilebilirlik Ağacı'na (Accessibility Tree) — erişim sağlar. Bu mekanizma iOS ve Android'de aynıdır, ancak API adları farklıdır.
Bir ekran okuyucunun ana çıkış kanalı bir konuşma sentezleyicisidir (Text-To-Speech, TTS). Erişilebilirlik odağı bir öğeye geldiğinde, ekran okuyucu metin içeriğini (veya geliştirici tarafından sağlanan açıklamayı) çıkarır ve TTS motoruna gönderir. Apple Speech Synthesis ve Google Text-to-Speech gibi modern TTS motorları, noktalama işaretlerine ve içerik türüne bağlı olarak doğru tonlama, duraklama ve vurgu ile doğal konuşma üretmek için sinir ağlarını kullanır.
Kullanıcı konuşma hızını (genellikle rahat algılama için maksimumun %60–80'i), perdeyi ve ses seviyesini ayarlayabilir. Bazı ekran okuyucular birden çok sesi destekler ve içerik türüne bağlı olarak aralarında geçiş yapar — örneğin, metin okumak için daha yavaş bir ses ve arayüz navigasyonu için daha hızlı bir ses. Braille ekranlar Bluetooth aracılığıyla bağlanır ve her seferinde 40–80 karaktere kadar görüntüler, her odak değişiminde satırı günceller.
Bir ekran okuyucu, standart giriş odağından farklı olan Erişilebilirlik Odağı (Accessibility Focus) kavramını kullanır. Kullanıcı, jestler (dokunma, kaydırma) kullanarak erişilebilirlik odağını hareket ettirir ve ekran okuyucu odak altındaki öğeyi bildirir. Navigasyon sırası varsayılan olarak görsel sırayı takip eder: soldan sağa, yukarıdan aşağıya. Geliştirici, karmaşık düzenler için bu sırayı geçersiz kılabilir.
Ekran okuyucu ayrıca kullanıcının rotor (VoiceOver) veya menü (TalkBack) aracılığıyla değiştirdiği çeşitli navigasyon modlarını da destekler: başlıklara, bağlantılara, karakterlere, sözcüklere, formlara göre. Başlık modunda, ekran okuyucu yalnızca H1–H6 arasında hareket eder — bu, uzun sayfalar ve belgeler arasında verimli navigasyon için kritiktir. Karakter modu, onay kodları veya karmaşık şifreler girerken her karakteri ayrı ayrı telaffuz ederek yardımcı olur.
İki ekran okuyucu mobil platformlara hakimdir: iOS'ta VoiceOver ve Android'de TalkBack. Farklı API'lere, jestlere ve yeteneklere sahiptirler, ancak ortak prensip Erişilebilirlik Ağacı'nı okumak ve jest kontrolüdür.
VoiceOver, Apple'ın iOS, iPadOS ve macOS'a entegre ekran okuyucusudur. Öğeler hakkında bilgi almak için UIAccessibility API'sini kullanır ve navigasyon modlarını değiştirmek için rotoru destekler. VoiceOver, iCloud (cihazlar arasında ayar senkronizasyonu), Apple Pay (Touch ID veya Face ID ile ödeme onayı) ve Dinamik Metin (yazı tipi kullanıcı ayarlarına uyum sağlar) ile entegredir.
VoiceOver jestleri TalkBack'ten farklıdır: iki parmak döndürme (rotor), Screen Curtain için üç kez dokunma ve bir eylemi iptal etmek için iki parmakla çift dokunma kullanır. VoiceOver, geliştiricinin UIAccessibilityCustomRotor aracılığıyla eklediği özel rotorları destekler — örneğin, standart sırayı atlayarak uygulama bölümlerinde hızlı navigasyon için.
TalkBack, Google'ın Android Accessibility Suite'in bir parçası olan ekran okuyucusudur. Arayüze erişmek için AccessibilityService ve AccessibilityNodeInfo kullanır. TalkBack, L şeklinde kaydırma yoluyla küresel menü, öğeler için özel eylemler ve dinamik güncellemeler için LiveRegion'u destekler. Android 14'ten itibaren TalkBack, tek elle jest desteği ve Google Assistant ile gelişmiş entegrasyon kazanmıştır.
TalkBack, VoiceOver'dan daha esnek bir jest sistemine sahiptir: kullanıcı hemen hemen her jesti herhangi bir eyleme atayabilir. TalkBack ayrıca ekranda Braille girişini (BrailleBack) destekler — kullanıcı, parmak başına özel bir 3×2 düzeninde dokunmatik ekranda doğrudan Braille karakterleriyle metin girer, bu da ekran klavyesine kıyasla metin girişini önemli ölçüde hızlandırır.
| Özellik | VoiceOver (iOS) | TalkBack (Android) |
|---|---|---|
| API | UIAccessibility | AccessibilityService |
| Navigasyon | Rotor (2 parmak) | Küresel menü (L kaydırma) |
| Diller | 40+ | 30+ |
| Özel eylemler | UIAccessibilityCustomRotor | AccessibilityDelegate |
| Braille | Harici ekranlar | BrailleBack + harici |
| Dinamik güncellemeler | UIAccessibility.post | accessibilityLiveRegion |
VoiceOver ve TalkBack'in yanı sıra daha az yaygın mobil ekran okuyucular da vardır: Select to Speak (Android, seçili alanı okur), Samsung Voice Assistant (One UI ile Samsung cihazlarında TalkBack'in yerini alır) ve belirli nişler için üçüncü taraf çözümler — örneğin, Google hizmetleri olmayan Çin akıllı telefon kullanıcıları için.
Bir ekran okuyucunun uygulamanın UI bileşenlerine doğrudan erişimi yoktur. Bunun yerine, bir katman — işletim sisteminin erişilebilirlik API'si — aracılığıyla çalışır. İşletim sistemi, ekran okuyucunun dolaştığı ve analiz ettiği bir Erişilebilirlik Ağacı (Accessibility Tree) oluşturur.
iOS'ta Erişilebilirlik Ağacı, ekrandaki her View'e karşılık gelen UIAccessibilityElement nesnelerinden oluşturulur. Her öğe bir label (ana metin), traits (öğe türü: düğme, başlık, bağlantı), hint (araç ipucu), value (kaydırıcılar ve göstergeler için geçerli değer) ve frame (dokunma alanı) içerir. Sistem, standart UI bileşenleri için otomatik olarak öğeler oluşturur, ancak geliştirici bunları ekleyebilir ve özelleştirebilir.
Android'de Erişilebilirlik Ağacı AccessibilityNodeInfo nesnelerinden oluşturulur. Her düğüm şunları içerir: text (metin veya contentDescription), className (öğe türü), contentDescription (açıklama), stateDescription (durum), isEnabled, isChecked, isClickable ve diğer bayraklar. Android ayrıca AccessibilityAction'ı da destekler — ekran okuyucunun kullanıcı adına gerçekleştirebileceği eylemlerin listesi: tıklama, uzun basma, kaydırma, odak ayarlama, metin ayarlama.
Arayüzde bir değişiklik meydana geldiğinde (yeni bir öğe belirir, metin değişir, bir öğe görünür veya görünmez olur), işletim sistemi bir AccessibilityEvent gönderir. Ekran okuyucu bu olaylara abone olur ve bunlara tepki verir: örneğin, bir iletişim kutusu göründüğünde, ekran okuyucu otomatik olarak odağı başlığına taşır ve içeriği bildirir.
// Android'de erişilebilirlik olaylarını dinleme
class CustomAccessibilityService : AccessibilityService() {
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
event ?: return
when (event.eventType) {
TYPE_VIEW_CLICKED ->
handleClick(event)
TYPE_WINDOW_STATE_CHANGED ->
handleWindowChange(event)
TYPE_VIEW_TEXT_CHANGED ->
handleTextChange(event)
}
}
}
iOS'ta benzer olaylar UIAccessibility.Notification aracılığıyla işlenir: layoutChanged (düzen değişti), screenChanged (tamamen yeni ekran), announcement (özel duyuru), pageScrolled (sayfa kaydırma). Geliştirici, ekran okuyucunun değişikliklere doğru yanıt vermesi için bu olayları UIAccessibility.post aracılığıyla gönderir. Örneğin, bir modal pencere açarken, yeni başlıkla birlikte screenChanged gönderilmelidir — aksi takdirde VoiceOver pencerenin altındaki önceki öğede kalır.
Erişilebilir bir uygulama oluşturmak, her öğeye contentDescription eklemek değil — görsel olmayan etkileşim için kullanıcı deneyimini tasarlamaktır. Temel kurallar her iki platform için de aynıdır, ancak uygulama farklılık gösterir.
Tüm etkileşimli öğeler anlamlı açıklamalara sahip olmalıdır: bir “Gönder” düğmesi yalnızca “Düğme” değil, “Mesaj Gönder” olarak tanımlanmalıdır. Dekoratif öğeler (ayırıcılar, arka plan resimleri, işlevsel olmayan simgeler) ekran okuyucudan gizlenmelidir. Navigasyon sırası görsel düzeni değil, ekranın mantıksal akışını izlemelidir. Metin kontrastı, gövde metni için en az 4.5:1 ve büyük metin için 3:1 (WCAG AA) olmalıdır.
// iOS: karmaşık bir öğe için doğru yapılandırma
let customControl = UIControl()
customControl.isAccessibilityElement = true
customControl.accessibilityLabel = "Ses seviyesi"
customControl.accessibilityValue = "yüzde 75"
customControl.accessibilityTraits = [
.adjustable,
.button
]
customControl.accessibilityHint =
"Ses seviyesini artırır veya azaltır"
// Değer değiştiğinde güncelleme
func didChangeVolume(newValue: Float) {
customControl.accessibilityValue =
"\(Int(newValue)) yüzde"
UIAccessibility.post(
notification: .layoutChanged,
argument: customControl
)
}
iOS'ta isAccessibilityElement bayrağı, özel öğeler için VoiceOver desteğini etkinleştirir. Traits kombinasyonu (.adjustable + .button), VoiceOver'a öğenin yukarı/aşağı kaydırarak ayarlanabileceğini ve çift dokunarak etkinleştirilebileceğini bildirir. Değer değiştirildikten sonra bir layoutChanged bildirimi gönderilmelidir — aksi takdirde VoiceOver eski değeri bildirmeye devam eder.
iOS için: okuma sırasını geçersiz kılmak için accessibilityElements, bağlam menüsünde ek eylemler için accessibilityCustomActions ve öğeleri mantıksal gruplar halinde gruplamak için shouldGroupAccessibilityChildren kullanın. SwiftUI için .accessibilityLabel(), .accessibilityAddTraits() ve .accessibilityRespondsToUserInteraction() değiştiricilerini kullanın. Etkileşimli alt öğeler içeren kaplarda isAccessibilityElement = false ayarlamaktan kaçının — bu onları VoiceOver'dan gizler.
Android için: navigasyon sırası için accessibilityTraversalBefore ve accessibilityTraversalAfter, özel öğeler için AccessibilityDelegate ve dinamik güncellemeler için LiveRegion (polite/assertive) kullanın. Compose'da contentDescription, stateDescription ve customActions ile .semantics {} değiştiricisini kullanın. Etkileşimli olmayan öğelerde focusable = true ayarlamaktan kaçının — bu TalkBack için yanlış odak noktaları oluşturur ve kullanıcının kafasını karıştırır.
Bir ekran okuyucuyla test, fiziksel bir cihazda yapılmalıdır. Bir öykünücü/benzetimci temel bir anlayış sağlar, ancak jestler ve yanıt hızı farklılık gösterir. iOS için Accessibility Inspector (Xcode) ve otomatik sorun tespiti için Android'de Accessibility Scanner kullanın.
Ana test senaryoları: kayıt (form doldurma, doğrulama, gönderme), arama ve katalogda gezinme, ödeme, şifre kurtarma. Her senaryo görsel kontrol olmadan — yalnızca ekran okuyucunun sesli ipuçları aracılığıyla — tamamlanabilir olmalıdır. Bir ekran okuyucu kullanıcısı bir senaryoyu normal bir kullanıcıyla aynı sürede (±%50) tamamlayamıyorsa, uygulamanın erişilebilirlik iyileştirmelerine ihtiyacı vardır.
Sıkça Sorulan Sorular
Akıllı telefon ekranında olan her şeyi (metin, düğmeler, bildirimler) seslendiren bir programdır. Kullanıcı, jestlerle cihazı kontrol eder — bir öğeye dokunarak adını duyar ve çift dokunarak etkinleştirir. Ekran Okuyucu görmeyi sesle değiştirir.
iOS'ta — VoiceOver (Apple'ın yerleşik sistem ekran okuyucusu). Android'de — TalkBack (Google'ın Android Erişilebilirlik Paketi'nin parçası). Her ikisi de jest kontrolü, sesli geri bildirim ve Bluetooth aracılığıyla Braille ekranları destekler.
Tüm etkileşimli öğeler için contentDescription (Android) veya accessibilityLabel (iOS) ayarlayın. Dekoratif öğeleri ekran okuyucudan gizleyin. Dinamik değişikliklerde bildirimler gönderin. Fiziksel bir cihazda görsel kontrol olmadan ekran okuyucu açıkken test edin.
Temel fark API'lerde ve jestlerdedir. VoiceOver iOS'ta UIAccessibility ve navigasyon için rotor (iki parmak döndürme) kullanır. TalkBack Android'de AccessibilityService ve L şeklinde kaydırma yoluyla küresel menü kullanır. Çalışma prensibi — Erişilebilirlik Ağacı'nı dolaşmak — aynıdır.
Bir ekran okuyucu bir görüntüyü “göremez”. Geliştiricinin contentDescription (Android) veya accessibilityLabel (iOS) aracılığıyla sağladığı metin açıklamasını okur. Hiçbir açıklama ayarlanmamışsa, ekran okuyucu dosya adını okuyabilir veya sadece “görüntü” diyebilir — bu kullanıcı için işe yaramaz.
Ö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