«Attribut contentDescription manquant sur l'image» dans XML

222

Je reçois un avertissement concernant [Accessibilité] Attribut contentDescription manquant sur l'image dans eclipse. Cet avertissement apparaît à la ligne 5 (déclarer ImageView) dans le code XML ci-dessous.

Cela ne fait aucune erreur lors de la génération et de l'exécution de mon application. Mais je veux vraiment savoir pourquoi je reçois cet avertissement.

Voici mon fichier 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>

Veuillez m'aider à ce sujet et merci pour votre lecture.

PhatHV
la source
6
la nouvelle suggestion de version ADT ajoute android:contentDescriptioncet attribut imageview, juste une suggestion, je pense que vous pouvez l'ignorer, cela ne fait pas l'erreur de compilation, vous pouvez également vérifierhttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
oui c'est vrai
Rahul Kushwaha

Réponses:

269

Suivez ce lien pour la solution: contenu Android Lint

Cet avertissement a été résolu en définissant l'attribut android: contentDescription pour mon ImageView

android: contentDescription = "@ string / desc"

La prise en charge d'Android Lint dans ADT 16 génère cet avertissement pour garantir que les widgets d'image fournissent un contenu

Ceci définit un texte qui décrit brièvement le contenu de la vue. Cette propriété est utilisée principalement pour l'accessibilité. Étant donné que certaines vues n'ont pas de représentation textuelle, cet attribut peut être utilisé pour les fournir.

Les widgets non textuels comme ImageViews et ImageButtons doivent utiliser l'attribut contentDescription pour spécifier une description textuelle du widget de sorte que les lecteurs d'écran et d'autres outils d'accessibilité puissent décrire correctement l'interface utilisateur.

Ce lien pour l'explication: Accessibilité, son impact et ressources de développement

De nombreux utilisateurs d'Android ont des handicaps qui les obligent à interagir avec leurs appareils Android de différentes manières. Il s'agit notamment des utilisateurs ayant des handicaps visuels, physiques ou liés à l'âge qui les empêchent de voir ou d'utiliser complètement un écran tactile.

Android fournit des fonctionnalités et des services d'accessibilité pour aider ces utilisateurs à naviguer plus facilement sur leurs appareils, y compris la synthèse vocale, la rétroaction haptique, la trackball et la navigation par D-pad qui augmentent leur expérience. Les développeurs d'applications Android peuvent profiter de ces services pour rendre leurs applications plus accessibles et également créer leurs propres services d'accessibilité.

Ce guide vise à rendre votre application accessible: rendre les applications plus accessibles

Il est relativement facile de s'assurer que votre application est accessible à tous les utilisateurs, en particulier lorsque vous utilisez des composants d'interface utilisateur fournis par le framework. Si vous utilisez uniquement ces composants standard pour votre application, quelques étapes sont nécessaires pour garantir que votre application est accessible:

  1. Votre étiquette ImageButton , ImageView , EditText , CheckBox et d' autres contrôles d'interface utilisateur en utilisant l' Android: contentDescription attribut.

  2. Rendez tous vos éléments d'interface utilisateur accessibles avec un contrôleur directionnel, comme un trackball ou un D-pad.

  3. Testez votre application en activant des services d'accessibilité tels que TalkBack et Explore by Touch, et essayez d'utiliser votre application en utilisant uniquement des commandes directionnelles.

PhatHV
la source
92
Encore une remarque importante! Dans ce cas, il semble que l'image soit purement décorative et ne fournisse pas d'informations supplémentaires à l'utilisateur. Ainsi, par exemple, vous ne voudriez pas dire "Image de contact" à l'utilisateur, mais vous voudrez peut-être dire "Photo de profil de Bob" si vous ne montrez ce texte nulle part ailleurs. Si une image ne doit pas être parlée à l'utilisateur, vous pouvez définir android: contentDescription = "@ null" et l'avertissement disparaîtra.
alanv
1
@alanv: excellent commentaire. Bien mieux que de désactiver complètement l'avertissement comme il est généralement conseillé.
ChiefTwoPencils
13
En fait, je ne pense pas que Android: contentDescription = "@ null" soit la meilleure solution. J'utilise des outils: ignore = "ContentDescription" c'est ce qui est censé être. Assurez-vous d'inclure xmlns: tools = " schemas.android.com/tools " dans votre présentation racine.
Sotti
merci d'avoir fourni un si joli document. lorsque vous avez des images comme l'application de galerie de fonds d'écran, est-il approprié d'ajouter une description de contenu pour toutes les images? et peut-il également avoir un impact sur les performances des applications?
Rahul Mandaliya,
67

Ajoutez android:contentDescription="@string/description"(statique ou dynamique) à votre ImageView. Veuillez ne pas ignorer ni filtrer le message, car il est utile pour les personnes utilisant des méthodes de saisie alternatives en raison de leur handicap (comme TalkBack, Tecla Access Shield, etc.).

Jeroen
la source
@ Jeroen- Lorsque j'ai ajouté une description, cela dit: "Impossible de résoudre la ressource @ chaîne / loginText" - Pourquoi?
Jamal Zafar
Avez-vous une chaîne loginText dans la chaîne XML?
Praveen
1
@JamalZafar crée une chaîne dans string.xml avec le nom loginText
Ayush Goyal
36

Actualisé:

Comme indiqué dans les commentaires, la définition de la description sur null indique que l'image est purement décorative et est comprise comme celle par des lecteurs d'écran comme TalkBack.

Ancienne réponse, je ne soutiens plus cette réponse:

Pour toutes les personnes qui cherchent à éviter l'avertissement:

Je ne pense pas que ce android:contentDescription="@null"soit la meilleure solution.

J'utilise tools:ignore="ContentDescription"ce qui est censé être.

Assurez-vous d'inclure xmlns:tools="http://schemas.android.com/tools"dans votre disposition racine.

Sotti
la source
1
Celui-ci devrait être voté parce que c'est aussi ce que Google a recommandé
Le Dinh Nhat Khanh
4
Utiliser @nullcomme contenu La description est une façon de dire explicitement que cette image est purement décorative. Ignorer simplement l'avertissement n'est pas la bonne solution.
karl
1
L'utilisation @nullindique à TalkBack que l'image est décorative. Vous ne devriez pas ignorer l'avertissement, car mettre @nullInformer TalkBack plutôt que de faire croire qu'il est manquant et devrait être là.
Ab
10

Ajouter

tools:ignore="ContentDescription"

à votre image. Assurez-vous de l'avoir xmlns:tools="http://schemas.android.com/tools" .dans votre disposition racine.

Mwongera808
la source
1
+1. Ceci est le correctif d'Android Studio pour ce problème (lorsque vous effectuez une analyse de code, le bouton "supprimer les peluches" fait exactement cela)
noamgot
9

L'avertissement est en effet ennuyeux et dans de nombreux cas (la plupart!), Aucune description de contenu n'est nécessaire pour les différentes images décoratives. La façon la plus radicale de résoudre le problème est simplement de dire au Lint d'ignorer cette vérification. Dans Eclipse, accédez à "Android / Lint Error Checking" dans les préférences, recherchez "contentDescription" (il se trouve dans le groupe "Accessibility") et remplacez "Severity:" par Ignore.

AlexR
la source
9
N'ignorez pas cet avertissement. Comme d'autres l'ont souligné, l'accessibilité est importante même s'il ne s'agit que d'une image décorative. Ce n'est pas grave d'ajouter le contenu souhaité Description
jamesc
1
Vous pouvez également ignorer l'avertissement si votre application est essentiellement inaccessible même avec des descriptions de contenu. Par exemple, pourquoi s'embêter avec contentDescriptionun jeu qui nécessite la vue pour pouvoir jouer?
CorayThan
Oui, c'est le choix radical; alors que font les gens qui sont conscients de son objectif et qui souhaitent s'y conformer? J'oserais dire que dans ce cas particulier, oubliez "la plupart" des cas; cela semble impliquer que parce que "la plupart" des gens ne sont pas aveugles, par exemple, c'est un avertissement inutile? Si "la plupart" de vos images n'ont pas besoin d'un tel contenu - très bien, désactivez l'avertissement, mais ajoutez-le là où cela aurait du sens. Être un peu serviable peut aller très loin.
ChiefTwoPencils
9

Si vous ne vous souciez pas du tout, faites ceci:

    android:contentDescription="@null"

Bien que je conseille les solutions acceptées, il s'agit d'un hack: D

alap
la source
3
En fait, je ne pense pas que Android: contentDescription = "@ null" soit la meilleure solution. J'utilise des outils: ignore = "ContentDescription" c'est ce qui est censé être. Assurez-vous d'inclure xmlns: tools = " schemas.android.com/tools " dans votre présentation racine.
Sotti
Personne n'a dit ça. Relisez le commentaire. Vous ignorez simplement l'avertissement de sorte que la solution que vous proposez est définitivement pire. Lisez à nouveau la réponse la plus acceptée.
alap
5

À l'avenir, pour des éléments graphiques purement décoratifs , la meilleure solution est d'utiliser:

android:importantForAccessibility="no"

Cela a du sens si votre version minimale du SDK est au moins 16, car les appareils exécutant des versions inférieures ignoreront cet attribut.

Si vous ne supportez pas les anciennes versions, vous devriez utiliser (comme d'autres l'ont déjà souligné):

android:contentDescription="@null"

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

arekolek
la source
2

Cet avertissement tente d'améliorer l'accessibilité de votre application.

Pour désactiver l'avertissement de description de contenu manquant dans l'ensemble du projet, vous pouvez l'ajouter à votre module d'application build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Maksim Turaev
la source
0

Il vous donne l'avertissement car la description de l'image n'est pas définie.

Nous pouvons résoudre cet avertissement en ajoutant ce code ci-dessous dans Strings.xml et activity_main.xml

Ajoutez cette ligne ci-dessous dans 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" />

Ajoutez également cette ligne dans 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
la source