Skip to main content
Logo Appt Light

Speak screen

Speech settings help if the user is unable to look at the screen. They are necessary for the blind and visually impaired. But people with autism or focus and concentration problems also use this function: these users often have difficulty reading written text. The feature to speak the entire content of the screen ensures that all content on the screen can be read aloud. The accessibility feature to have the contents of the entire screen read aloud is only present on iPhones. It works by swiping down with two fingers. Android has no comparable feature.

Based on our accessibility research, we estimate that about 200,000 Dutch people have switched on this accessibility feature on their iOS phone. Note: even more people are having selected text read aloud on their iPhone.


use the speak screen feature on iOS.

The speak screen feature is not available on Android.

Jeroen - Asset

My iPhone is my third eye.


Read the interview with Jeroen


By the way, having the contents of the screen speak is not the same as VoiceOver. Our results do not show any significant use of voice-over. But for VoiceOver, speak screen, and speak selection to work properly for a user, all non-text content must have a text alternative that serves the same purpose.

Support in apps

Non-text content such as buttons and images must be labeled. Below is explained how it can be added to an element in native and cross-platform apps.

On Android, you can use the contentDescription attribute to set an accessibility label.

You can also pass any kind of Span for greater control over pronunciation. For example, you can set a language by using LocaleSpan.

If another element is used to display the label, you can link the label by using the labelFor attribute.

// Set accessibility label
element.contentDescription = "Appt"

// Set accessibility label in Dutch language
val locale = Locale.forLanguageTag("nl-NL")
val localeSpan = LocaleSpan(locale)

val string = SpannableString("Appt")
string.setSpan(localeSpan, 0, string.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE)

element.contentDescription = localeSpan

// Link visual label to field


This is part of the WCAG's following success criterion:


Let us know!