Os usuários dos serviços de acessibilidade, como leitores de tela, precisam de marcadores de conteúdo para entender o significado dos elementos de uma interface.
Em alguns casos, como quando as informações são transmitidas graficamente em um elemento, os marcadores de conteúdo podem fornecer um texto descritivo com o significado ou ação associados ao elemento.
Se os elementos em uma interface não têm marcadores de conteúdo, alguns usuários poderão ter dificuldade para entender as informações apresentadas a eles ou realizar ações na interface.
Implementação
ViewQuando certos tipos de Views
são usados em uma interface, eles precisam ter marcadores de conteúdo que descrevam a finalidade ou ação associada a essa View
.
Como fornecer marcadores de conteúdo
android:contentDescription
Ao usar ImageView
, ImageButton
, CheckBox
ou outra View
que transmita informações graficamente, adicione um atributo android:contentDescription
para fornecer um marcador de conteúdo para essa View
.
Em alguns casos, um marcador de conteúdo depende das informações disponíveis apenas no tempo de execução, ou o significado de uma View
pode mudar com o tempo. Por exemplo, um botão "Reproduzir" pode mudar para um botão "Pausar" durante a reprodução de músicas. Nesses casos, use View#setContentDescription(CharSequence contentDescription)
para atualizar o marcador de conteúdo no momento apropriado.
Normalmente, quando um serviço de acessibilidade descreve um ViewGroup
, ele combina marcadores de conteúdo das Views
filhas. Para modificar esse comportamento e indicar que você quer fornecer sua própria descrição para esse item e para as Views
filhas não focalizáveis, defina contentDescription
em ViewGroup
. Talvez seja necessário incluir marcadores de conteúdo de Views
filhas em uma contentDescription
definida em um ViewGroup
.
android:hint
No caso de EditTexts
ou TextViews
editáveis, use um atributo android:hint
para indicar a finalidade do campo de texto. Uma android:contentDescription
não precisa ser usada como um marcador de conteúdo para Views
editáveis.
android:labelFor
Use um atributo android:labelFor
para indicar que uma View
deve atuar como marcador de conteúdo de outra View
.
Quando os marcadores de conteúdo não são necessários
Em certos casos, marcadores de conteúdo não precisam ser especificamente fornecidos:
- O texto renderizado em
TextView
(ou subclasses) é automaticamente fornecido para serviços de acessibilidade. Geralmente, marcadores de conteúdo extras são desnecessários. - Imagens decorativas ou que não transmitem informações graficamente significativas não precisam de marcadores de conteúdo. Nesses casos, defina um atributo
android:contentDescription
de"@null"
ou um atributoandroid:importantForAccessibility
de"no"
.
Saiba mais sobre a implementação de marcadores de conteúdo no Treinamento para desenvolvedor Android e nos Guias de API.
Quando certos tipos de combináveis são usados em uma interface, eles precisam ter marcadores de conteúdo que descrevam a finalidade ou ação associada.
Como fornecer marcadores de conteúdo
Descrições de conteúdo
Se você quiser fornecer um marcador de conteúdo para Image
, Icon
ou outro combinável de nível inferior que transmita informações gráficas, defina a descrição do conteúdo.
- Um marcador de conteúdo pode depender das informações do tempo de execução, e o significado do combinável pode mudar. Por exemplo, um botão "Reproduzir" pode mudar para "Pausar" durante a reprodução de músicas.
- Nesses casos, use "state" para que o Compose possa fazer e reescrever as mudanças na descrição do conteúdo com o novo valor. Saiba como usar State e o Jetpack Compose.
- Em alguns casos, você pode mesclar os elementos em um único focalizável que combine os marcadores de conteúdo dos descendentes. Saiba como mesclar elementos.
Parâmetro "label"
Alguns combináveis, como TextField
, aceitam um parâmetro label
opcional. Quando o marcador é definido, o elemento exibe o combinável transmitido para label
. Os serviços de acessibilidade podem ser usados para descrever o combinável.
Quando os marcadores de conteúdo não são necessários
Em certos casos, marcadores de conteúdo não precisam ser adicionados.
- O texto renderizado em
Text
ou em outros combináveis que contenhamText
é fornecido automaticamente aos serviços de acessibilidade. - Imagens decorativas ou que não transmitem informações graficamente significativas.
- Nesses casos, defina o parâmetro
contentDescription
ou a propriedadeModifier.semantics#contentDescription
comonull
ou chameModifier#clearAndSetSemantics
.
- Nesses casos, defina o parâmetro
Design
Ao projetar uma interface do usuário, pense cuidadosamente como o conteúdo representado graficamente precisa ser marcado para os usuários de serviços de acessibilidade. Os marcadores de conteúdo precisam seguir estes princípios:
- Ser conciso e descrever com clareza a ação ou o significado associado a um elemento.
- Não incluir o tipo ou estado de um elemento no marcador de conteúdo dele.
- Se o elemento for associado a uma ação, descrever a ação, e não a representação gráfica.
- Não instruir o usuário sobre como interagir especificamente com o elemento.
Saiba mais nas Diretrizes de escrita de acessibilidade do Material Design.
Testes
Para verificar manualmente se a interface do usuário de um app não está sem os marcadores de conteúdo necessários, siga estas etapas
- Ative o TalkBack.
- Abra o app.
- Use gestos de navegação linear para mover o foco da acessibilidade para cada elemento na tela.
- Quando o TalkBack move o foco para algum elemento, mas não apresenta uma representação significativa dele nem uma mensagem "não marcada", é porque esse elemento pode estar sem um marcador de conteúdo.
As ferramentas de teste automatizadas do Android podem detectar a falta de marcadores de conteúdo. Recomendamos que você use o Scanner de acessibilidade para Android se quiser fazer o teste manual do seu app no dispositivo. No caso de testes automatizados, ative a verificação de acessibilidade no Espresso e no Robolectric.