Formatting Causing Speech Issues

Id FormattingCausingSpeechIssues
Summary Irregular casing, spacing, or symbols cause speech synthesis to mispronounce or spell words
Severity Informational
Category Assistive Technologies / Content Descriptions
Affects Resource files and Kotlin and Java files
Implementation Heuristics, or other solutions could be considered to detect ALL CAPS words, unusual casing patterns (snake_case, camelCase, PascalCase), common abbreviations (e.g., FAQ, id, ok, btn), excessive whitespace (multiple spaces or tabs), special characters (e.g., •, >, >>>), and line breaks in text or contentDescription. Manual testing for final validation

Symptom

UI text or contentDescription contains formatting issues such as ALL CAPS words, unusual casing patterns (snake_case, camelCase), abbreviations, excessive spacing, special characters, or line breaks that cause screen readers to produce awkward pronunciation, letter-by-letter spelling, or unnatural pauses during speech synthesis.

Rationale

Creates poor user experience for assistive technology users who hear unnatural speech patterns (technical jargon like "btn_share_action", "A-D-D" instead of "add", awkward pauses from spacing) instead of natural, meaningful pronunciation, slowing down interaction and causing confusion about UI element purpose and function.

Examples

XML Layout Example

<!-- Multiple issues: ALL CAPS, abbreviation, excessive spacing,
     special characters, and line breaks -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="USER   ID:   FAQ   >>>   ONLINE" />
    <!-- Should be: android:text="User ID: Frequently Asked Questions, Online"
         OR add android:contentDescription="User ID: Frequently Asked Questions, Online"
         to provide proper announcement for screen readers -->

Kotlin Code Example

val tab = findViewById<TabLayout.Tab>(R.id.tab)
// Problematic: abbreviated and numeric date format as tab text
// causes screen reader to read: "Sun, 23, Feb."
tab.text = "Sun, 23, Feb."
// To improve screen reader output, add:
// tab.contentDescription = "Sunday, February 23rd"

GitHub issues under this tag