Screen Reader (αναγνώστης οθόνης) — ένα πρόγραμμα που μετατρέπει κείμενο και γραφικά στοιχεία διεπαφής σε ομιλία ή έξοδο σε οθόνη Braille, επιτρέποντας σε τυφλούς και άτομα με μειωμένη όραση να αλληλεπιδρούν με τη συσκευή χωρίς οπτικό έλεγχο. Σε κινητές πλατφόρμες, οι κύριοι αναγνώστες οθόνης είναι το VoiceOver στο iOS και το TalkBack στο Android. Σύμφωνα με τον Παγκόσμιο Οργανισμό Υγείας (2023), το Screen Reader είναι το κύριο εργαλείο πρόσβασης σε ψηφιακές τεχνολογίες για 285 εκατομμύρια άτομα με προβλήματα όρασης στον κόσμο.
Κύρια σημεία
Screen Reader (αναγνώστης οθόνης) — είναι μια υποστηρικτική τεχνολογία (Assistive Technology, AT) που ερμηνεύει τη γραφική διεπαφή χρήστη και την παρουσιάζει σε μη οπτική μορφή: μέσω συνθετικής ομιλίας ή απτικής οθόνης Braille. Οι αναγνώστες οθόνης είναι το κύριο μέσο πρόσβασης σε υπολογιστές και κινητές συσκευές για άτομα με πλήρη ή μερική απώλεια όρασης.
Οι πρώτοι αναγνώστες οθόνης εμφανίστηκαν στα τέλη της δεκαετίας του 1980 για MS-DOS (π.χ. Vocal-Eyes) και αργότερα για Windows (JAWS, NVDA). Σε κινητές πλατφόρμες, οι αναγνώστες οθόνης άρχισαν να ενσωματώνονται σε επίπεδο συστήματος: η Apple ενσωμάτωσε το VoiceOver στο iPhone 3GS το 2009, η Google ενσωμάτωσε το TalkBack στο Android 1.6 την ίδια χρονιά. Μέχρι το 2025, σχεδόν όλα τα σύγχρονα smartphone διαθέτουν ενσωματωμένο αναγνώστη οθόνης που δεν απαιτεί εγκατάσταση πρόσθετου λογισμικού.
Το Screen Reader δεν διαβάζει απλώς κείμενο από την οθόνη — αναλύει την ιεραρχία της διεπαφής, καθορίζει τους τύπους στοιχείων (κουμπί, σύνδεσμος, επικεφαλίδα, πεδίο εισαγωγής), την κατάστασή τους (ενεργοποιημένο/απενεργοποιημένο, επιλεγμένο/μη επιλεγμένο) και τις αμοιβαίες σχέσεις (γονέας-παιδί, ομάδα). Αυτές οι πληροφορίες μεταδίδονται στον χρήστη μέσω φωνητικών οδηγιών ή απτικών αισθήσεων της οθόνης Braille, η οποία ενημερώνει τα κελιά σε πραγματικό χρόνο σύμφωνα με τη θέση της εστίασης.
Το Screen Reader λειτουργεί σε στενή σύνδεση με το λειτουργικό σύστημα, έχοντας πρόσβαση στην εσωτερική του αναπαράσταση της διεπαφής — το δέντρο προσβασιμότητας (Accessibility Tree). Αυτός ο μηχανισμός είναι ίδιος σε iOS και Android, αν και τα ονόματα API διαφέρουν.
Το κύριο κανάλι εξόδου του αναγνώστη οθόνης είναι ο συνθετητής ομιλίας (Text-To-Speech, TTS). Όταν η εστίαση προσβασιμότητας φτάνει σε ένα στοιχείο, ο αναγνώστης οθόνης εξάγει το περιεχόμενο κειμένου του (ή την περιγραφή που έχει ορίσει ο προγραμματιστής) και το στέλνει στη μηχανή TTS. Οι σύγχρονες μηχανές TTS, όπως τα Apple Speech Synthesis και Google Text-to-Speech, χρησιμοποιούν νευρωνικά δίκτυα για τη δημιουργία φυσικής ομιλίας με σωστό τονισμό, παύσεις και προφορές ανάλογα με τα σημεία στίξης και τον τύπο περιεχομένου.
Ο χρήστης μπορεί να ρυθμίσει την ταχύτητα ομιλίας (συνήθως 60-80% της μέγιστης για άνετη αντίληψη), το ύψος τόνου και την ένταση. Ορισμένοι αναγνώστες οθόνης υποστηρίζουν πολλές φωνές και εναλλαγή μεταξύ τους ανάλογα με τον τύπο περιεχομένου — για παράδειγμα, πιο αργή φωνή για ανάγνωση κειμένου και γρήγορη για πλοήγηση στη διεπαφή. Οι οθόνες Braille συνδέονται μέσω Bluetooth και εμφανίζουν 40-80 χαρακτήρες ταυτόχρονα, ενημερώνοντας τη γραμμή σε κάθε αλλαγή εστίασης.
Ο αναγνώστης οθόνης χρησιμοποιεί την έννοια της εστίασης προσβασιμότητας (Accessibility Focus), η οποία διαφέρει από την τυπική εστίαση εισόδου. Ο χρήστης μετακινεί την εστίαση προσβασιμότητας με χειρονομίες (άγγιγμα, σύρσιμο), και ο αναγνώστης οθόνης εκφωνεί το στοιχείο κάτω από την εστίαση. Η σειρά πλοήγησης από προεπιλογή ακολουθεί την οπτική σειρά: από αριστερά προς τα δεξιά, από πάνω προς τα κάτω. Ο προγραμματιστής μπορεί να παρακάμψει αυτήν τη σειρά για πολύπλοκες διατάξεις.
Ο αναγνώστης οθόνης υποστηρίζει επίσης διάφορες λειτουργίες πλοήγησης, τις οποίες ο χρήστης εναλλάσσει μέσω ρότορα (VoiceOver) ή μενού (TalkBack): ανά επικεφαλίδες, συνδέσμους, χαρακτήρες, λέξεις, φόρμες. Στη λειτουργία επικεφαλίδων, ο αναγνώστης οθόνης κινείται μόνο μεταξύ H1-H6 — αυτό είναι κρίσιμο για αποτελεσματική πλοήγηση σε μεγάλες σελίδες και έγγραφα. Η λειτουργία χαρακτήρων βοηθά κατά την εισαγωγή κωδικών επιβεβαίωσης ή σύνθετων κωδικών πρόσβασης, προφέροντας κάθε χαρακτήρα ξεχωριστά.
Στις κινητές πλατφόρμες κυριαρχούν δύο αναγνώστες οθόνης: το VoiceOver στο iOS και το TalkBack στο Android. Έχουν διαφορετικά API, χειρονομίες και δυνατότητες, αλλά κοινή αρχή λειτουργίας — ανάγνωση του δέντρου προσβασιμότητας και έλεγχος με χειρονομίες.
VoiceOver — ο αναγνώστης οθόνης της Apple, ενσωματωμένος σε iOS, iPadOS και macOS. Χρησιμοποιεί το API UIAccessibility για τη λήψη πληροφοριών σχετικά με στοιχεία και υποστηρίζει τον ρότορα για εναλλαγή λειτουργιών πλοήγησης. Το VoiceOver είναι ενσωματωμένο με το iCloud (οι ρυθμίσεις συγχρονίζονται μεταξύ συσκευών), το Apple Pay (επιβεβαίωση πληρωμής μέσω Touch ID ή Face ID) και το δυναμικό κείμενο (η γραμματοσειρά προσαρμόζεται στις ρυθμίσεις του χρήστη).
Οι χειρονομίες του VoiceOver διαφέρουν από το TalkBack: χρησιμοποιείται περιστροφή δύο δαχτύλων (ρότορας), τριπλό άγγιγμα για το Screen Curtain και διπλό άγγιγμα με δύο δάχτυλα για ακύρωση ενέργειας. Το VoiceOver υποστηρίζει προσαρμοσμένους ρότορες, τους οποίους ο προγραμματιστής προσθέτει μέσω UIAccessibilityCustomRotor — για παράδειγμα, για γρήγορη πλοήγηση στις ενότητες της εφαρμογής παρακάμπτοντας την τυπική σειρά.
TalkBack — ο αναγνώστης οθόνης της Google, μέρος του Android Accessibility Suite. Χρησιμοποιεί AccessibilityService και AccessibilityNodeInfo για πρόσβαση στη διεπαφή. Το TalkBack υποστηρίζει καθολικό μενού μέσω σύρσης σχήματος L, προσαρμοσμένες ενέργειες για στοιχεία και LiveRegion για δυναμικές ενημερώσεις. Από το Android 14, το TalkBack έλαβε υποστήριξη για χειρονομίες με ένα χέρι και βελτιωμένη ενσωμάτωση με το Google Assistant.
Το TalkBack έχει πιο ευέλικτο σύστημα χειρονομιών από το VoiceOver: ο χρήστης μπορεί να ρυθμίσει σχεδόν οποιαδήποτε χειρονομία για οποιαδήποτε ενέργεια. Το TalkBack υποστηρίζει επίσης εισαγωγή Braille στην οθόνη (BrailleBack) — ο χρήστης εισάγει κείμενο με χαρακτήρες Braille απευθείας στην οθόνη αφής σε ειδική διάταξη 3×2 για κάθε δάχτυλο, η οποία επιταχύνει σημαντικά την πληκτρολόγηση σε σύγκριση με το πληκτρολόγιο οθόνης.
| Χαρακτηριστικό | VoiceOver (iOS) | TalkBack (Android) |
|---|---|---|
| API | UIAccessibility | AccessibilityService |
| Πλοήγηση | Ρότορας (2 δάχτυλα) | Καθολικό μενού (σύρση L) |
| Γλώσσες | 40+ | 30+ |
| Προσαρμοσμένες ενέργειες | UIAccessibilityCustomRotor | AccessibilityDelegate |
| Braille | Εξωτερικές οθόνες | BrailleBack + εξωτερικές |
| Δυναμικές ενημερώσεις | UIAccessibility.post | accessibilityLiveRegion |
Εκτός από VoiceOver και TalkBack, υπάρχουν λιγότερο διαδεδομένοι κινητοί αναγνώστες οθόνης: Select to Speak (Android, εκφώνηση επιλεγμένης περιοχής), Samsung Voice Assistant (αντικατάσταση TalkBack σε συσκευές Samsung με One UI) και λύσεις τρίτων για συγκεκριμένες θέσεις — για παράδειγμα, για χρήστες κινέζικων smartphone χωρίς υπηρεσίες Google.
Το Screen Reader δεν έχει άμεση πρόσβαση στα στοιχεία UI της εφαρμογής. Αντίθετα, λειτουργεί μέσω ενός ενδιάμεσου επιπέδου — του API προσβασιμότητας του λειτουργικού συστήματος. Το λειτουργικό σύστημα χτίζει το δέντρο προσβασιμότητας (Accessibility Tree), το οποίο ο αναγνώστης οθόνης διασχίζει και αναλύει.
Στο iOS, το δέντρο προσβασιμότητας χτίζεται από αντικείμενα UIAccessibilityElement, που αντιστοιχούν σε κάθε View στην οθόνη. Κάθε στοιχείο περιέχει: label (κύριο κείμενο), traits (τύπος στοιχείου: κουμπί, επικεφαλίδα, σύνδεσμος), hint (υπόδειξη), value (τρέχουσα τιμή για ρυθμιστικά και δείκτες) και frame (περιοχή αφής). Το σύστημα δημιουργεί αυτόματα στοιχεία για τυπικά στοιχεία UI, αλλά ο προγραμματιστής μπορεί να τα προσθέσει και να τα ρυθμίσει.
Στο Android, το δέντρο προσβασιμότητας χτίζεται από αντικείμενα AccessibilityNodeInfo. Κάθε κόμβος περιέχει: text (κείμενο ή contentDescription), className (τύπος στοιχείου), contentDescription (περιγραφή), stateDescription (κατάσταση), isEnabled, isChecked, isClickable και άλλες σημαίες. Το Android υποστηρίζει επίσης το AccessibilityAction — μια λίστα ενεργειών που μπορεί να εκτελέσει ο αναγνώστης οθόνης εκ μέρους του χρήστη: κλικ, μακρά πίεση, κύλιση, ρύθμιση εστίασης, ρύθμιση κειμένου.
Όταν συμβαίνει μια αλλαγή στη διεπαφή (εμφανίστηκε νέο στοιχείο, άλλαξε το κείμενο, το στοιχείο έγινε ορατό ή αόρατο), το λειτουργικό σύστημα στέλνει ένα AccessibilityEvent. Ο αναγνώστης οθόνης είναι συνδρομητής σε αυτά τα συμβάντα και αντιδρά σε αυτά: για παράδειγμα, όταν εμφανίζεται ένα παράθυρο διαλόγου, ο αναγνώστης οθόνης μετακινεί αυτόματα την εστίαση στην επικεφαλίδα του και εκφωνεί το περιεχόμενο.
// Ακρόαση συμβάντων προσβασιμότητας στο Android
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, παρόμοια συμβάντα διαχειρίζονται μέσω UIAccessibility.Notification: layoutChanged (άλλαξε η διάταξη), screenChanged (εντελώς νέα οθόνη), announcement (αυθαίρετη ανακοίνωση), pageScrolled (κύλιση σελίδας). Ο προγραμματιστής στέλνει αυτά τα συμβάντα μέσω UIAccessibility.post ώστε ο αναγνώστης οθόνης να αντιδρά σωστά σε αλλαγές. Για παράδειγμα, κατά το άνοιγμα ενός modal παραθύρου, πρέπει να σταλεί screenChanged με τη νέα επικεφαλίδα — διαφορετικά το VoiceOver θα παραμείνει στο προηγούμενο στοιχείο κάτω από το παράθυρο.
Η δημιουργία μιας προσβάσιμης εφαρμογής δεν είναι απλώς η προσθήκη contentDescription σε κάθε στοιχείο, αλλά η σκέψη της εμπειρίας χρήστη για μη οπτική αλληλεπίδραση. Οι βασικοί κανόνες είναι κοινοί και για τις δύο πλατφόρμες, αν και η υλοποίηση διαφέρει.
Όλα τα διαδραστικά στοιχεία πρέπει να έχουν ουσιαστική περιγραφή: το κουμπί "Αποστολή" πρέπει να περιγράφεται ως "Αποστολή μηνύματος", όχι ως "Κουμπί". Τα διακοσμητικά στοιχεία (διαχωριστικά, εικόνες φόντου, εικονίδια χωρίς λειτουργικότητα) πρέπει να κρύβονται από τον αναγνώστη οθόνης. Η σειρά πλοήγησης πρέπει να αντιστοιχεί στη λογική ροή της οθόνης, όχι στην οπτική διάταξη. Η αντίθεση κειμένου πρέπει να είναι τουλάχιστον 4.5:1 για το κύριο κείμενο και 3:1 για το μεγάλο κείμενο (WCAG AA).
// iOS: σωστή διαμόρφωση για σύνθετο στοιχείο
let customControl = UIControl()
customControl.isAccessibilityElement = true
customControl.accessibilityLabel = "Ένταση ήχου"
customControl.accessibilityValue = "75 τοις εκατό"
customControl.accessibilityTraits = [
.adjustable,
.button
]
customControl.accessibilityHint =
"Αυξάνει ή μειώνει την ένταση"
// Ενημέρωση κατά την αλλαγή τιμής
func didChangeVolume(newValue: Float) {
customControl.accessibilityValue =
"\(Int(newValue)) τοις εκατό"
UIAccessibility.post(
notification: .layoutChanged,
argument: customControl
)
}
Στο iOS, η σημαία isAccessibilityElement ενεργοποιεί την υποστήριξη VoiceOver για προσαρμοσμένα στοιχεία. Ο συνδυασμός traits (.adjustable + .button) ενημερώνει το VoiceOver ότι το στοιχείο μπορεί να ρυθμιστεί με σύρσιμο πάνω/κάτω και να ενεργοποιηθεί με διπλό άγγιγμα. Μετά την αλλαγή τιμής, αποστέλλεται υποχρεωτικά η ειδοποίηση layoutChanged — διαφορετικά το VoiceOver θα συνεχίσει να εκφωνεί την παλιά τιμή.
Για iOS: χρησιμοποιήστε accessibilityElements για παράκαμψη της σειράς ανάγνωσης, accessibilityCustomActions για πρόσθετες ενέργειες στο μενού περιβάλλοντος και shouldGroupAccessibilityChildren για ομαδοποίηση στοιχείων σε λογικές ομάδες. Για SwiftUI, εφαρμόστε τους τροποποιητές .accessibilityLabel(), .accessibilityAddTraits() και .accessibilityRespondsToUserInteraction(). Αποφύγετε τη χρήση isAccessibilityElement = false σε κοντέινερ που περιέχουν διαδραστικά θυγατρικά στοιχεία — αυτό θα τα κρύψει από το VoiceOver.
Για Android: χρησιμοποιήστε accessibilityTraversalBefore και accessibilityTraversalAfter για τη σειρά πλοήγησης, AccessibilityDelegate για προσαρμοσμένα στοιχεία και LiveRegion (polite/assertive) για δυναμικές ενημερώσεις. Στο Compose, εφαρμόστε τον τροποποιητή .semantics {} με contentDescription, stateDescription και customActions. Αποφύγετε τη χρήση focusable = true σε μη διαδραστικά στοιχεία — αυτό θα δημιουργήσει ψεύτικα σημεία εστίασης για το TalkBack και θα μπερδέψει τον χρήστη.
Η δοκιμή με αναγνώστη οθόνης είναι υποχρεωτική σε φυσική συσκευή. Ο εξομοιωτής/προσομοιωτής δίνει μια βασική ιδέα, αλλά οι χειρονομίες και η ταχύτητα απόκρισης διαφέρουν. Χρησιμοποιήστε το Accessibility Inspector (Xcode) για iOS και το Accessibility Scanner για Android για αυτόματη αναζήτηση προβλημάτων.
Τα κύρια σενάρια δοκιμών: εγγραφή (συμπλήρωση φόρμας, επικύρωση, αποστολή), αναζήτηση και πλοήγηση στον κατάλογο, παραγγελία, ανάκτηση κωδικού πρόσβασης. Κάθε σενάριο πρέπει να είναι εκτελέσιμο χωρίς οπτικό έλεγχο — μόνο μέσω φωνητικών οδηγιών του αναγνώστη οθόνης. Εάν ένας χρήστης αναγνώστη οθόνης δεν μπορεί να ολοκληρώσει το σενάριο στον ίδιο χρόνο με έναν συνηθισμένο χρήστη (±50%), — η εφαρμογή απαιτεί βελτίωση προσβασιμότητας.
Συχνές Ερωτήσεις
Είναι ένα πρόγραμμα που εκφωνεί όλα όσα συμβαίνουν στην οθόνη του smartphone: κείμενο, κουμπιά, ειδοποιήσεις. Ο χρήστης ελέγχει τη συσκευή με χειρονομίες — αγγίζει ένα στοιχείο για να ακούσει το όνομά του και αγγίζει δύο φορές για να το ενεργοποιήσει. Το Screen Reader αντικαθιστά την όραση με φωνή.
Στο iOS — VoiceOver (ενσωματωμένος αναγνώστης οθόνης συστήματος από την Apple). Στο Android — TalkBack (μέρος του Android Accessibility Suite από την Google). Και οι δύο υποστηρίζουν έλεγχο με χειρονομίες, φωνητική ανατροφοδότηση και οθόνες Braille μέσω Bluetooth.
Ορίστε contentDescription (Android) ή accessibilityLabel (iOS) για όλα τα διαδραστικά στοιχεία. Κρύψτε τα διακοσμητικά στοιχεία από τον αναγνώστη οθόνης. Στείλτε ειδοποιήσεις σε δυναμικές αλλαγές. Δοκιμάστε με ενεργοποιημένο αναγνώστη οθόνης σε φυσική συσκευή χωρίς οπτικό έλεγχο.
Η κύρια διαφορά είναι στο API και στις χειρονομίες. Το VoiceOver χρησιμοποιεί UIAccessibility στο iOS και ρότορα για πλοήγηση (περιστροφή δύο δαχτύλων). Το TalkBack χρησιμοποιεί AccessibilityService στο Android και καθολικό μενού μέσω σύρσης σχήματος L. Η αρχή λειτουργίας — διάσχιση του δέντρου προσβασιμότητας — είναι ίδια.
Το Screen Reader δεν μπορεί να "δει" την εικόνα. Διαβάζει την περιγραφή κειμένου που ορίζει ο προγραμματιστής μέσω contentDescription (Android) ή accessibilityLabel (iOS). Εάν δεν έχει οριστεί περιγραφή, ο αναγνώστης οθόνης μπορεί να διαβάσει το όνομα αρχείου ή απλώς να πει "εικόνα" — που είναι άχρηστο για τον χρήστη.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης