Skip to content

Accessibility Behavior

Maciej Jastrzebski edited this page Oct 2, 2022 · 11 revisions

Methods of testing:

  • iOS: using Accessibility Inspector (in iOS mode!) on iOS simulator
  • Android: using TalkBack on Android emulator

<Text> component

<Text> behavior in iOS

Component Screen reader Label Value Traits Identifier Hint User Input Label
<Text>Hello!</Text> Hello! Hello ! (none) Static Text (none) (none) Hello !
accessible={true} accessibilityRole="text" Hello! Hello ! (none) Static Text (none) (none) Hello !
accessible={true} Hello! Hello ! (none) Static Text (none) (none) Hello !
accessible={false} (ignored) (ignored) (ignored) (ignored) (ignored) (ignored) (ignored)
accessibilityRole="text" Hello! Hello ! (none) Static Text (none) (none) Hello !
accessibilityRole="none" Hello! Hello ! (none) (none) (none) (none) Hello !

Findings:

  • iOS behaves the same for when accessible={true} or when prop is not specified
  • iOS behaves the same for when accessibilityRole="text" or when prop is not specified
  • iOS ignores element when accessible={false}
  • ichanging accessibilityRole to "none" removes Static Text trait, but view is still readable by screen reader

<Text> behavior in Android

Component Screen reader
<Text >Hello!</Text> Hello!
accessible={true} accessibilityRole="text" Hello!
accessible={true} Hello!
accessible={false} Hello!
accessibilityRole="text" Hello!
accessibilityRole="none" Hello!
importantForAccessibility="no" (ignored)
importantForAccessibility="no-hide-descendants" (ignored)

Findings:

  • Android accessible props does not affect TalkBack screen reader behaviour
  • Android accessibilityRole props does not affect TalkBack screen reader behaviour
  • Android ignores element if importantForAccessibility value "no" or "no-hide-descendants"

<Text> handling recommendations

  • assume default accessible value of true
  • assume default accessibilityRole of text
  • assume no role when accessible={false} or accessibilityRole="none" (based on iOS semantics)
  • assume no role when importantForAccessibility="no" or importantForAccessibility="no-hide-descendants" (based on Android semantics)
Clone this wiki locally