'Atributo contentDescription ausente na imagem' em XML

222

Recebo um aviso sobre o atributo [Accessibility] ausente contentDescription na imagem no eclipse. Este aviso é exibido na linha 5 (declarar ImageView) no código XML abaixo.

Isso não comete nenhum erro ao criar e executar meu aplicativo. Mas eu realmente quero saber por que recebo esse aviso.

Este é o meu arquivo XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/contact_entry_image"
        android:src="@drawable/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/contact_entry_text"
        android:text=""
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        />

</LinearLayout>

Por favor, ajude-me sobre isso e obrigado pela sua leitura.

PhatHV
fonte
6
o novo ADT versão sugestão adicionar android:contentDescriptionesse atributo em imageview, apenas uma sugestão, eu acho que você pode ignorar isso, ele não fazer o erro de compilação, você também pode conferirhttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
Sim, isso está certo
Rahul Kushwaha

Respostas:

269

Siga este link para obter a solução: Conteúdo do Android Lint

Resolvido este aviso, definindo o atributo android: contentDescription for my ImageView

android: contentDescription = "@ string / desc"

O suporte ao Android Lint no ADT 16 lança esse aviso para garantir que os widgets de imagem forneçam um conteúdo

Isso define o texto que descreve brevemente o conteúdo da exibição. Esta propriedade é usada principalmente para acessibilidade. Como algumas visualizações não têm representação textual, esse atributo pode ser usado para fornecê-las.

Widgets não textuais como ImageViews e ImageButtons devem usar o atributo contentDescription para especificar uma descrição textual do widget, para que os leitores de tela e outras ferramentas de acessibilidade possam descrever adequadamente a interface do usuário.

Este link para explicação: Acessibilidade, seu impacto e recursos de desenvolvimento

Muitos usuários do Android têm deficiências que exigem que eles interajam com seus dispositivos Android de maneiras diferentes. Isso inclui usuários com deficiências visuais, físicas ou relacionadas à idade que os impedem de ver ou usar completamente uma tela de toque.

O Android fornece recursos e serviços de acessibilidade para ajudar esses usuários a navegar em seus dispositivos com mais facilidade, incluindo conversão de texto em fala, feedback tátil, trackball e D-pad que aumentam sua experiência. Os desenvolvedores de aplicativos Android podem tirar proveito desses serviços para tornar seus aplicativos mais acessíveis e também criar seus próprios serviços de acessibilidade.

Este guia é para tornar seu aplicativo acessível: Como tornar os aplicativos mais acessíveis

Garantir que seu aplicativo esteja acessível a todos os usuários é relativamente fácil, principalmente quando você usa componentes da interface do usuário fornecidos pela estrutura. Se você usar apenas esses componentes padrão para seu aplicativo, são necessárias apenas algumas etapas para garantir que seu aplicativo esteja acessível:

  1. Rotule seus ImageButton , ImageView , EditText , CheckBox e outros controles da interface do usuário usando o atributo android: contentDescription .

  2. Torne todos os elementos da interface do usuário acessíveis com um controlador direcional, como um trackball ou D-pad.

  3. Teste seu aplicativo ativando serviços de acessibilidade como o TalkBack e o Explore by Touch e tente usá-lo usando apenas controles direcionais.

PhatHV
fonte
92
Mais uma nota importante! Nesse caso, parece que a imagem é puramente decorativa e não fornece informações adicionais ao usuário. Assim, por exemplo, você não gostaria de falar "Imagem de contato" para o usuário, mas pode querer falar "Foto do perfil de Bob" se não mostrar esse texto em nenhum outro lugar. Se uma imagem não deve ser falada ao usuário, você pode definir android: contentDescription = "@ null" e o aviso desaparecerá.
Alanv 1/1
1
@ alanv: ótimo comentário. Muito melhor do que desativar o aviso completamente, como é comumente recomendado.
ChiefTwoPencils
13
Na verdade, eu não acho que o android: contentDescription = "@ null" é a melhor solução. Estou usando ferramentas: ignore = "ContentDescription", que é o que deveria ser. Certifique-se de incluir xmlns: tools = " schemas.android.com/tools " em seu layout raiz.
Sotti 11/11
obrigado por fornecer um documento tão bom. quando você tiver imagens como o aplicativo galeria de papel de parede, é adequado adicionar a descrição do conteúdo para todas as imagens? e também pode afetar o desempenho do aplicativo?
Rahul Mandaliya
67

Adicione android:contentDescription="@string/description"(estático ou dinâmico) ao seu ImageView. Por favor, não ignore nem filtre a mensagem, pois é útil para pessoas que usam métodos de entrada alternativos devido à sua deficiência (como o TalkBack, o Tecla Access Shield, etc.).

Jeroen
fonte
@ Jeroen- Quando adicionei a descrição, ele está dizendo: "Não foi possível resolver o recurso @ string / loginText" - Por que isso?
Jamal Zafar
Você tem uma string loginText na string XML?
precisa saber é o seguinte
1
@JamalZafar criar uma string em string.xml com o nome loginText
Ayush Goyal
36

Atualizada:

Conforme indicado nos comentários, definir a descrição como nulo indica que a imagem é puramente decorativa e é entendida como a de leitores de tela como o TalkBack.

Resposta antiga, não apóio mais esta resposta:

Para todas as pessoas que procuram como evitar o aviso:

Eu não acho que android:contentDescription="@null"é a melhor solução.

Estou usando tools:ignore="ContentDescription"isso é o que deveria ser.

Certifique-se de incluir xmlns:tools="http://schemas.android.com/tools"no seu layout raiz.

Sotti
fonte
1
Este deve ser votado porque é também o que o Google recomendou
Le Dinh Nhat Khanh
4
Usar @nullcomo contentDescription é uma maneira de dizer explicitamente que esta imagem é puramente decorativa. Simplesmente ignorar o aviso não é a solução correta.
karl
1
O uso @nullinforma ao TalkBack que a imagem é decorativa. Você não deve ignorar o aviso, pois @nullinforma o TalkBack em vez de fazê-lo pensar que está faltando e deve estar lá.
Ab
10

Adicionar

tools:ignore="ContentDescription"

à sua imagem. Verifique se você possui xmlns:tools="http://schemas.android.com/tools" .seu layout raiz.

Mwongera808
fonte
1
+1. Esta é correção do Android Studio for este problema (quando você executar código de analisar, no botão "suprimir Lint" faz exatamente isso)
noamgot
9

O aviso é realmente irritante e, em muitos (na maioria dos casos), nenhum contentDescription é necessário para vários ImageViews decorativos. A maneira mais radical de resolver o problema é dizer ao Lint para ignorar essa verificação. No Eclipse, acesse "Android / Lint Error Checking" em Preferences, localize "contentDescription" (está no grupo "Accessibility") e altere "Severity:" para Ignore.

AlexR
fonte
9
Não ignore este aviso. Como outros já apontaram, a acessibilidade é importante, mesmo que seja apenas uma imagem decorativa. Não é grande coisa para adicionar o
conteúdo
1
Você também pode ignorar o aviso se o seu aplicativo for essencialmente inacessível, mesmo com descrições de conteúdo. Por exemplo, por que se preocupar contentDescriptionem um jogo que requer visão para poder jogar?
CorayThan
Sim, essa é a escolha radical; Então, o que as pessoas que conhecem o seu objetivo e gostariam de cumprir? Atrevo-me a dizer que, nesse caso em particular, esqueça a "maioria" dos casos; isso parece estar implicando que, porque "a maioria" das pessoas não é, por exemplo, cega, é um aviso desnecessário? Se "a maioria" de suas imagens não precisar desse conteúdo, tudo bem, desative o aviso, mas adicione-o onde faria sentido. Ser um pouco útil pode ajudar bastante.
ChiefTwoPencils
9

Se você não se importa, faça o seguinte:

    android:contentDescription="@null"

Embora eu aconselhe as soluções aceitas, este é um truque: D

alap
fonte
3
Na verdade, eu não acho que o android: contentDescription = "@ null" é a melhor solução. Estou usando ferramentas: ignore = "ContentDescription", que é o que deveria ser. Certifique-se de incluir xmlns: tools = " schemas.android.com/tools " em seu layout raiz.
Sotti 11/11
Ninguém disse isso. Leia o comentário novamente. Você simplesmente ignora o aviso para que a solução que você fornece seja definitivamente pior. Leia a resposta mais aceita novamente.
alap
5

No futuro, para elementos gráficos puramente decorativos , a melhor solução é usar:

android:importantForAccessibility="no"

Isso faz sentido se sua versão mínima do SDK for pelo menos 16, pois os dispositivos que executam versões inferiores ignorarão esse atributo.

Se você não consegue suportar versões mais antigas, deve usar (como outros já apontaram):

android:contentDescription="@null"

Fonte: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements

arekolek
fonte
2

Este aviso tenta melhorar a acessibilidade do seu aplicativo.

Para desativar o aviso de descrição de conteúdo ausente em todo o projeto, você pode adicioná-lo ao seu módulo de aplicativo build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Maksim Turaev
fonte
0

Ele está dando o aviso porque a descrição da imagem não está definida.

Podemos resolver esse aviso adicionando este código abaixo em Strings.xml e activity_main.xml

Adicione esta linha abaixo em Strings.xml

<string name="imgDescription">Background Picture</string>
you image will be like that:
<ImageView
        android:id="@+id/imageView2"
        android:lay`enter code hereout_width="0dp"
        android:layout_height="wrap_content"
        android:contentDescription="@string/imgDescription"
        app:layout_editor_absoluteX="0dp"
        app:layout_editor_absoluteY="0dp"
        app:srcCompat="@drawable/background1"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp" />

Adicione também esta linha em activity_main.xml

android:contentDescription="@string/imgDescription"

Strings.xml

<resources>
    <string name="app_name">Saini_Browser</string>
    <string name="SainiBrowser">textView2</string>
    <string name="imgDescription">BackGround Picture</string>
</resources>
Kuldeep Singh
fonte