SOLFIND
Web Lens
Portal home

Principles for improving app accessibility | App quality | Android Developers

https://developer.android.com/guide/topics/ui/accessibility/principles • 332 KB fetched
Open original page


Principles for improving app accessibility | App quality | Android Developers

Skip to main content

Essentials

* Build AI experiences

* Build AI-powered Android apps with Gemini APIs and more.

*

Get started

* Get started

* Create your first app. Use Compose for UI and adaptive app development to support multiple device form factors.

*

Hello, world!

*

Developer Verification

*

Adaptive apps

*

Compose for UI

*

AI-powered IDE

*

Training

*

Monetization with Play ↗️

* Optimize by form factor

* Build apps that optimize the user experience on phones, tablets, foldables, cars, XR, and more.

*

Phones, tablets, foldables

*

Android for Cars

*

Android TV

*

Android XR

*

Googlebook

*

ChromeOS

*

Wear OS

* Build by category

* Learn to build for your use case by following Google's prescriptive and opinionated guidance.

*

Games

*

Camera & media

*

Social & messaging

*

Health & fitness

*

Productivity

*

Enterprise apps

* Get the latest

* Stay in touch with the latest releases throughout the year, join our preview programs, and give us your feedback.

*

Latest updates

*

Experimental updates

*

Android Studio preview

*

Jetpack & Compose libraries

*

Wear OS releases

*

Privacy Sandbox ↗️

Design & Plan

* Excellent Experiences

* Build the best experiences for your best users.

*

Learn more

* UI Design

* Design a beautiful user interface using Android best practices.

*

Design for Android

*

Mobile

*

Desktop experiences

*

XR Headsets & XR Glasses

*

AI Glasses

*

Widgets

*

Wear OS

*

Android TV

*

Android for Cars

* Architecture

* Design robust, testable, and maintainable app logic and services.

*

Introduction

*

Libraries

*

Navigation

*

Modularization

*

Testing

*

Kotlin Multiplatform

* Quality

* Plan for app quality and align with Play store guidelines.

*

Overview

*

Core value

*

User experience

*

Accessibility

*

Technical quality

*

Excellent Experiences

* Security

* Safeguard users against threats and ensure a secure Android experience.

*

Overview

*

Privacy

*

Permissions

*

Identity

*

Fraud prevention

Develop

* Gemini in Android Studio

* Your AI development companion for Android development.

*

Learn more

*

Get Android Studio

* Core areas

* Get the samples and docs for the features you need.

*

Samples

*

Multidevice support

*

User interfaces

*

Background work

*

Data and files

*

Connectivity

*

All core areas ⤵️

* Tools and workflow

* Use the IDE to write and build your app, or create your own pipeline.

*

Write and debug code

*

Build projects

*

Test your app

*

Performance

*

Command-line tools

*

Gradle plugin API

*

Android Bench

* Device tech

* Write code for form factors. Connect devices and share data.

*

Phones, tablets, foldables

*

ChromeOS

*

Android for Cars

*

Android TV

*

Android XR

*

Wear OS

*

Android Health

*

Better Together

*

All devices ⤵️

* Libraries

* Browse API reference documentation with all the details.

*

Android platform

*

Jetpack libraries

*

Compose libraries

*

Google Play services ↗️

*

Google Play SDK index ↗️

Google Play

* Play Console

* Publish your app or game and grow your business on Google Play.

*

Go to Play Console

*

Learn more ↗️

* Fundamentals

* Learn how to engage users, monitize, and secure your app.

*

Play Monetization

*

Play Integrity

*

Play Policies

*

Play Programs ↗️

* Games Dev Center

* Develop and deliver games. Get tools, downloads, and samples.

*

Overview

*

Play Asset Delivery

*

Play Games Services

*

Play Games on PC

*

Level Up guidelines

*

All Play guides ⤵️

* Libraries

* Browse API reference documentation with all the details.

*

Play Feature Delivery

*

Play In-app Updates

*

Play In-app Reviews

*

Play Install Referrer

*

Google Play services ↗️

*

Google Play SDK index ↗️

*

All Play libraries ⤵️

* Tools & resources

* Tools for publishing, promoting, and managing your app.

*

Android App Bundles

*

Brand & marketing

*

Play Console APIs ↗️

Blog

* the Android Developer's Blog

*

Read the latest

*

Explore the authors →

* Explore categories

*

Product News

Stay in the loop with the latest updates, feature releases, and behind-the-scenes looks at how we’re evolving.

*

Community

Discover stories from our users, spotlight features, and the collaborative projects that bring us all together.

*

How-tos

From quick tips to deep-dive tutorials, these step-by-step guides are designed to help you work smarter and faster.

*

Case Studies

Real-world results from real-world users. Explore how different teams use our tools to achieve their goals.

*

Events & Programs

Get the details on upcoming webinars, workshops, meetups, and special initiatives designed to help you grow.

*

Documentation

Access detailed manuals, API references, and technical specifications to help you build and integrate with confidence.

/

*
English

*
Deutsch

*
Español – América Latina

*
Français

*
Indonesia

*
Italiano

*
Polski

*
Português – Brasil

*
Tiếng Việt

*
Türkçe

*
Русский

*
עברית

*
العربيّة

*
فارسی

*
हिंदी

*
বাংলা

*
ภาษาไทย

*
中文 – 简体

*
中文 – 繁體

*
日本語

*
한국어

Android Studio

Sign in

*

App quality

Overview

Core value

User experience

Technical quality

Privacy & Security

*

Essentials

*

More

*

Design & Plan

*

More

*

Overview

*

Core value

*

User experience

*

Technical quality

*

Privacy & Security

*

Develop

*

More

*

Google Play

*

More

*

Blog

*

More

*

Android Studio

* Overview

* Core app quality

*
Form factors

*

Adaptive app quality

* Overview

* Tier 3 — Adaptive ready

* Tier 2 — Adaptive optimized

*

Tier 1 — Adaptive differentiated

* Overview

* Desktop

* Foldables

* Camera • Audio

* Stylus

* Wear OS app quality

* Widget quality

* Android XR app quality

* TV app quality

* Car app quality

*
Accessibility

* In this guide

*

Build and test apps for accessibility

* Make apps more accessible

* Principles for improving app accessibility

* Test your app's accessibility

*

Advanced topics

* Make composables more accessible

* Create your own accessibility service

* Additional resources

*
On Google Play

* Play games quality

*

Build AI experiences

*

Get started

*

Get started

*

Hello, world!

*

Developer Verification

*

Adaptive apps

*

Compose for UI

*

AI-powered IDE

*

Training

*

Monetization with Play ↗️

*

Optimize by form factor

*

Phones, tablets, foldables

*

Android for Cars

*

Android TV

*

Android XR

*

Googlebook

*

ChromeOS

*

Wear OS

*

Build by category

*

Games

*

Camera & media

*

Social & messaging

*

Health & fitness

*

Productivity

*

Enterprise apps

*

Get the latest

*

Latest updates

*

Experimental updates

*

Android Studio preview

*

Jetpack & Compose libraries

*

Wear OS releases

*

Privacy Sandbox ↗️

*

Excellent Experiences

*

Learn more

*

UI Design

*

Design for Android

*

Mobile

*

Desktop experiences

*

XR Headsets & XR Glasses

*

AI Glasses

*

Widgets

*

Wear OS

*

Android TV

*

Android for Cars

*

Architecture

*

Introduction

*

Libraries

*

Navigation

*

Modularization

*

Testing

*

Kotlin Multiplatform

*

Quality

*

Overview

*

Core value

*

User experience

*

Accessibility

*

Technical quality

*

Excellent Experiences

*

Security

*

Overview

*

Privacy

*

Permissions

*

Identity

*

Fraud prevention

*

Gemini in Android Studio

*

Learn more

*

Get Android Studio

*

Core areas

*

Samples

*

Multidevice support

*

User interfaces

*

Background work

*

Data and files

*

Connectivity

*

All core areas ⤵️

*

Tools and workflow

*

Write and debug code

*

Build projects

*

Test your app

*

Performance

*

Command-line tools

*

Gradle plugin API

*

Android Bench

*

Device tech

*

Phones, tablets, foldables

*

ChromeOS

*

Android for Cars

*

Android TV

*

Android XR

*

Wear OS

*

Android Health

*

Better Together

*

All devices ⤵️

*

Libraries

*

Android platform

*

Jetpack libraries

*

Compose libraries

*

Google Play services ↗️

*

Google Play SDK index ↗️

*

Play Console

*

Go to Play Console

*

Learn more ↗️

*

Fundamentals

*

Play Monetization

*

Play Integrity

*

Play Policies

*

Play Programs ↗️

*

Games Dev Center

*

Overview

*

Play Asset Delivery

*

Play Games Services

*

Play Games on PC

*

Level Up guidelines

*

All Play guides ⤵️

*

Libraries

*

Play Feature Delivery

*

Play In-app Updates

*

Play In-app Reviews

*

Play Install Referrer

*

Google Play services ↗️

*

Google Play SDK index ↗️

*

All Play libraries ⤵️

*

Tools & resources

*

Android App Bundles

*

Brand & marketing

*

Play Console APIs ↗️

*

the Android Developer's Blog

*

Read the latest

*

Explore the authors →

*

Explore categories

*

Product News

*

Community

*

How-tos

*

Case Studies

*

Events & Programs

*

Documentation

*

Android Developers

*

Design & Plan

*

App quality

*

User experience

Principles for improving app accessibility

Stay organized with collections

Save and categorize content based on your preferences.

Note: Documentation across developer.android.com is being refactored to
show how to accomplish tasks with Compose. We recommend using Compose for your
app, but you can still access the Views-specific information for the concepts
on this page at Principles for improving app accessibility (Views) .
To assist users with accessibility needs, the Android framework lets you
create an accessibility service that can present content from apps to users
and also operate apps on their behalf.

Android provides several system accessibility services, including the following:

* TalkBack :
helps people who have low vision or are blind. It announces content through a
synthesized voice and performs actions on an app in response to user gestures.

* Switch Access :
helps people who have motor disabilities. It highlights interactive elements
and performs actions in response to the user pressing a button. It allows for
controlling the device using only one or two buttons.

To help people with accessibility needs use your app successfully, your
app must follow the best practices described on this page, which build on
the guidelines described in Make apps more
accessible .

Each of these best practices, described in the sections that follow,
can further improve your app's accessibility:

Label elements
Users must be able to understand the content and purpose of each interactive
and meaningful UI element within your app.
Add accessibility actions
By adding accessibility actions, you can enable users of accessibility
services to complete critical user flows within your app.
Use built-in accessibility features
Compose offers many accessibility behaviors by default. Take advantage of
predefined accessibility behaviors to make your components accessible with
little or no additional work. Compose also provides ways to support more
specific accessibility requirements not covered by the default features.
Use cues other than color
Users must be able to clearly distinguish between categories of elements in
a UI. To do so, use patterns and position, along with color, to express these
differences.
Make media content more accessible
Add descriptions to your app's video or audio content so that users
who consume this content don't need to rely on entirely visual or aural cues.

Label elements

It's important to provide users with useful and descriptive labels for each
interactive UI element in your app. Each label must explain the semantics
of a particular element—that is, the element's meaning and purpose. Screen
readers such as TalkBack can announce these labels to users.

In most cases, Compose APIs and Material have
default accessibility support in place. However, if you need to manually
specify a UI element's semantic properties, use the semantics modifier and
the contentDescription property. For more information about semantics, see
Semantics .

The following sections describe several other labeling techniques.

Editable elements

When labeling editable elements, such as text fields, it's helpful to show
text that gives an example of valid input in the element itself, in addition to
making this example text available to screen readers. In these situations, you
can use placeholder text, also called hint text.

In the following example, the TextField has a placeholder parameter that
provides hint text.

val usernameState = rememberTextFieldState ()
TextField (
state = usernameState ,
lineLimits = TextFieldLineLimits . SingleLine ,
placeholder = { Text ( "Enter Username" ) }
) StateBasedText . kt

It's also common for a text field to have a corresponding
descriptive label that describes what users must enter as input.

In the following example, the TextField has a label parameter that provides
an accessibility description.

TextField (
state = rememberTextFieldState ( initialText = "Hello" ),
label = { Text ( "Label" ) }
) StateBasedText . kt

For more information about text and user input, see Configure text fields .

Elements in a collection

When adding labels to the elements of a collection, each label must be unique.
This way, the system's accessibility services can refer to exactly one on-screen
element when announcing a label. This correspondence lets users know when
they cycle through the UI or when they move focus to an element that
they already discovered.

For example, when you have a LazyColumn or LazyRow , use the semantics
modifier to assign a unique collectionItemInfo to each item, as shown in the
following snippet:

MilkyWayList (
modifier = Modifier
. semantics {
collectionInfo = CollectionInfo (
rowCount = milkyWay . count (),
columnCount = 1
)
}
) {
milkyWay . forEachIndexed { index , text - >
Text (
text = text ,
modifier = Modifier . semantics {
collectionItemInfo =
CollectionItemInfo ( index , 0 , 0 , 0 )
}
)
}
} AccessibilitySnippets . kt

For more information about semantics properties for lists and grids, see
List and item information .

Groups of related content

If your app displays several UI elements that form a natural group, such as
details of a song or attributes of a message, arrange these elements within a
parent container (like Column , Row , or Box ). Use the parent container's
semantics modifier to set mergeDescendants to true .

This way, accessibility services can present the inner elements' content
descriptions one after the other, in a single announcement. Consolidating
related elements helps users of assistive technology discover the information
on the screen more efficiently.

In the following snippet, the Row composable acts as the parent container.
Within the Row are related elements that show metadata for a blog
post—the author's avatar, the author's name, and the estimated reading time.
Setting mergeDescendants to true groups these inner elements, so
accessibility services can treat them as one unit.

@Composable
private fun PostMetadata ( metadata : Metadata ) {
// Merge elements below for accessibility purposes
Row ( modifier = Modifier . semantics ( mergeDescendants = true ) {}) {
Image (
imageVector = Icons . Filled . AccountCircle ,
contentDescription = null // decorative
)
Column {
Text ( metadata . author . name )
Text ( " ${ metadata . date } • ${ metadata . readTimeMinutes } min read" )
}
}
} AccessibilitySnippets . kt

When grouping related elements like in the previous example, make only the
parent container interactive. Avoid adding clickable or focusable modifiers
to the inner child elements. Instead, apply the modifiers to the parent Row
or Column .

Because accessibility services announce the inner elements' descriptions in a
single utterance, it's important to keep each description as short as possible
while still conveying the element's meaning.

Note: In general, when
creating a content description for a group, avoid aggregating the text of its
children. Doing so makes the group's description brittle, and when the text of a
child changes, the group's description might no longer match the visible text.

In a list or a grid context, a screen reader might consolidate the text of a
list or grid element's child text nodes. It is best to avoid modifying this
announcement.

For more information about merging semantics, see Merging and clearing .

Headings within text

Some apps use headings to summarize groups of text that appear on screen. If
a particular element represents a heading, you can indicate its purpose
for accessibility services by setting the heading property in the semantics
modifier.

@Composable
private fun Subsection ( text : String ) {
Text (
text = text ,
style = MaterialTheme . typography . headlineSmall ,
modifier = Modifier . semantics { heading () }
)
} AccessibilitySnippets . kt

Users of accessibility services can choose to navigate between headings
instead of between paragraphs or between words. This flexibility improves the
text navigation experience.

For more information about the heading semantics property, see Headings .

Accessibility pane titles

In Android 9 (API level 28) and higher, you can provide
accessibility-friendly titles for a screen's panes . For accessibility
purposes, a pane is a visually distinct portion of a window.

For accessibility services to understand a
pane's window-like behavior, give descriptive titles to your app's
panes. Accessibility services can then provide more granular information to
users when a pane's appearance or content changes.

ShareSheet (
message = "Choose how to share this photo" ,
modifier = Modifier
. fillMaxWidth ()
. align ( Alignment . TopCenter )
. semantics { paneTitle = "New bottom sheet" }
) AccessibilitySnippets . kt

Note: Use unique pane titles across your app. Because TalkBack uses pane titles
as identifiers, reusing generic titles (like "List" or "Details") on completely
independent screens can cause unintended side effects and unpredictable
accessibility behavior.
For more informat

Links found on this page

  1. Skip to main content [direct]
  2. Essentials [direct]
  3. Get started [direct]
  4. Hello, world! [direct]
  5. Developer Verification [direct]
  6. Adaptive apps [direct]
  7. Compose for UI [direct]
  8. AI-powered IDE [direct]
  9. Training [direct]
  10. Monetization with Play ↗️ [direct]
  11. Phones, tablets, foldables [direct]
  12. Android for Cars [direct]
  13. Android TV [direct]
  14. Android XR [direct]
  15. Googlebook [direct]
  16. ChromeOS [direct]
  17. Wear OS [direct]
  18. Games [direct]
  19. Camera & media [direct]
  20. Social & messaging [direct]
  21. Health & fitness [direct]
  22. Productivity [direct]
  23. Enterprise apps [direct]
  24. Latest updates [direct]
  25. Experimental updates [direct]
  26. Android Studio preview [direct]
  27. Jetpack & Compose libraries [direct]
  28. Wear OS releases [direct]
  29. Privacy Sandbox ↗️ [direct]
  30. Design & Plan [direct]
  31. Learn more [direct]
  32. Design for Android [direct]
  33. Mobile [direct]
  34. Desktop experiences [direct]
  35. XR Headsets & XR Glasses [direct]
  36. AI Glasses [direct]
  37. Widgets [direct]
  38. Wear OS [direct]
  39. Android TV [direct]
  40. Android for Cars [direct]
  41. Introduction [direct]
  42. Libraries [direct]
  43. Navigation [direct]
  44. Modularization [direct]
  45. Testing [direct]
  46. Kotlin Multiplatform [direct]
  47. Overview [direct]
  48. Core value [direct]
  49. User experience [direct]
  50. Accessibility [direct]
  51. Technical quality [direct]
  52. Overview [direct]
  53. Privacy [direct]
  54. Identity [direct]
  55. Fraud prevention [direct]
  56. Develop [direct]
  57. Learn more [direct]
  58. Samples [direct]
  59. Multidevice support [direct]
  60. User interfaces [direct]
  61. Background work [direct]
  62. Data and files [direct]
  63. Connectivity [direct]
  64. Write and debug code [direct]
  65. Build projects [direct]
  66. Test your app [direct]
  67. Performance [direct]
  68. Command-line tools [direct]
  69. Gradle plugin API [direct]
  70. Android Bench [direct]
  71. Android for Cars [direct]
  72. Android TV [direct]
  73. Android XR [direct]
  74. Wear OS [direct]
  75. Android Health [direct]
  76. Better Together [direct]
  77. Android platform [direct]
  78. Jetpack libraries [direct]
  79. Compose libraries [direct]
  80. Google Play services ↗️ [direct]