TalkBack — ο ενσωματωμένος αναγνώστης οθόνης (screen reader) της Google για Android, που αποτελεί μέρος του πακέτου Android Accessibility Suite. Εκφωνεί τα στοιχεία της διεπαφής και επιτρέπει τον έλεγχο της συσκευής με χρήση χειρονομιών, παρέχοντας σε τυφλούς και άτομα με μειωμένη όραση πλήρη πρόσβαση στις λειτουργίες του smartphone. Σύμφωνα με το Google Accessibility Help (2025), το TalkBack είναι προεγκατεστημένο στις περισσότερες συσκευές Android και υποστηρίζει πάνω από 30 γλώσσες με διαφορετικές μηχανές φωνής.
Κύρια σημεία
TalkBack — είναι ένας αναγνώστης οθόνης (screen reader) για Android, αναπτυγμένος από την Google και μέρος του Android Accessibility Suite. Παρέχει φωνητική ανάδραση και έλεγχο με χειρονομίες για χρήστες με προβλήματα όρασης. Το TalkBack μπορεί να λειτουργεί τόσο σε smartphones όσο και σε tablets, 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 υποστηρίζει επίσης το μενού περιεχομένου για στοιχεία: σύρσιμο πάνω-δεξιά ανοίγει τη λίστα διαθέσιμων ενεργειών για το τρέχον στοιχείο (π.χ. “αντιγραφή”, “επικόλληση” για ένα πεδίο κειμένου ή “διαγραφή” για ένα μήνυμα στο chat).
Το 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.
Όταν το περιεχόμενο της οθόνης αλλάζει χωρίς ρητή ενέργεια του χρήστη (π.χ. εμφανίζεται ειδοποίηση νέου μηνύματος ή ανανεώνεται ο μετρητής likes), το 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης