'Fehlendes contentDescription-Attribut für Bild' in XML

222

Ich erhalte eine Warnung zu [Barrierefreiheit] Fehlendes contentDescription-Attribut für ein Bild in Eclipse. Diese Warnung wird in Zeile 5 (deklarieren ImageView) im folgenden XML-Code angezeigt.

Dies macht keinen Fehler beim Erstellen und Ausführen meiner Anwendung. Aber ich möchte wirklich wissen, warum ich diese Warnung bekomme.

Dies ist meine XML-Datei:

<?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>

Bitte helfen Sie mir dabei und bedanken Sie sich für Ihre Lektüre.

PhatHV
quelle
6
Der neue ADT-Versionsvorschlag fügt android:contentDescriptiondieses Attribut hinzu imageview, nur ein Vorschlag. Ich denke, Sie können dies ignorieren. Es macht http://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
keinen
Ja, das ist richtig
Rahul Kushwaha

Antworten:

269

Folgen Sie diesem Link für die Lösung: Android Lint contentDescription Warnung

Diese Warnung wurde behoben, indem das Attribut android: contentDescription für mein ImageView festgelegt wurde

android: contentDescription = "@ string / desc"

Die Unterstützung von Android Lint in ADT 16 gibt diese Warnung aus, um sicherzustellen, dass Bild-Widgets eine Inhaltsbeschreibung bereitstellen

Dies definiert Text, der den Inhalt der Ansicht kurz beschreibt. Diese Eigenschaft wird hauptsächlich für die Barrierefreiheit verwendet. Da einige Ansichten keine Textdarstellung haben, kann dieses Attribut zum Bereitstellen solcher verwendet werden.

Nicht-Text-Widgets wie ImageViews und ImageButtons sollten das contentDescription-Attribut verwenden, um eine Textbeschreibung des Widgets anzugeben, sodass Bildschirmleseprogramme und andere Eingabehilfen die Benutzeroberfläche angemessen beschreiben können.

Dieser Link zur Erklärung: Barrierefreiheit, Auswirkungen und Entwicklungsressourcen

Viele Android-Benutzer haben Behinderungen, bei denen sie auf unterschiedliche Weise mit ihren Android-Geräten interagieren müssen. Dazu gehören Benutzer mit visuellen, physischen oder altersbedingten Behinderungen, die verhindern, dass sie einen Touchscreen vollständig sehen oder verwenden.

Android bietet Eingabehilfen und Dienste, mit denen diese Benutzer einfacher auf ihren Geräten navigieren können, einschließlich Text-to-Speech, haptischem Feedback, Trackball und D-Pad-Navigation, die ihre Erfahrung verbessern. Entwickler von Android-Anwendungen können diese Dienste nutzen, um ihre Anwendungen zugänglicher zu machen und ihre eigenen Eingabehilfedienste zu erstellen.

Dieses Handbuch dient dazu, Ihre App zugänglich zu machen: Apps zugänglicher machen

Es ist relativ einfach sicherzustellen, dass Ihre Anwendung für alle Benutzer zugänglich ist, insbesondere wenn Sie vom Framework bereitgestellte Komponenten der Benutzeroberfläche verwenden. Wenn Sie nur diese Standardkomponenten für Ihre Anwendung verwenden, sind nur wenige Schritte erforderlich, um sicherzustellen, dass auf Ihre Anwendung zugegriffen werden kann:

  1. Beschriften Sie Ihre Steuerelemente ImageButton , ImageView , EditText , CheckBox und andere Benutzeroberflächen mit dem Attribut android: contentDescription .

  2. Machen Sie alle Elemente Ihrer Benutzeroberfläche mit einem Richtungsregler wie einem Trackball oder einem D-Pad zugänglich.

  3. Testen Sie Ihre Anwendung, indem Sie Eingabehilfen wie TalkBack und Explore by Touch aktivieren, und versuchen Sie, Ihre Anwendung nur mit Richtungssteuerungen zu verwenden.

PhatHV
quelle
92
Noch ein wichtiger Hinweis! In diesem Fall scheint das Bild rein dekorativ zu sein und bietet dem Benutzer keine zusätzlichen Informationen. So möchten Sie beispielsweise nicht "Kontaktbild" mit dem Benutzer sprechen, aber Sie möchten möglicherweise "Bobs Profilfoto" sprechen, wenn Sie diesen Text nirgendwo anders anzeigen. Wenn ein Bild nicht mit dem Benutzer gesprochen werden soll, können Sie android: contentDescription = "@ null" festlegen und die Warnung wird ausgeblendet.
Alanv
1
@ Alanv: toller Kommentar. Viel besser als das vollständige Deaktivieren der Warnung, wie allgemein empfohlen.
ChiefTwoPencils
13
Eigentlich glaube ich nicht, dass Android: contentDescription = "@ null" die beste Lösung ist. Ich benutze Tools: ignore = "ContentDescription", so soll es sein. Stellen Sie sicher, dass Sie xmlns: tools = " schemas.android.com/tools " in Ihr Root-Layout aufnehmen.
Sotti
Vielen Dank für die Bereitstellung eines so schönen Dokuments. Wenn Sie möglicherweise Bilder wie die Wallpaper Gallery App haben, ist es geeignet, eine Inhaltsbeschreibung für alle Bilder hinzuzufügen? und kann es auch die App-Leistung beeinflussen?
Rahul Mandaliya
67

Fügen Sie android:contentDescription="@string/description"Ihrer ImageView (statisch oder dynamisch) hinzu. Bitte ignorieren oder filtern Sie die Nachricht nicht, da sie für Personen hilfreich ist, die aufgrund ihrer Behinderung alternative Eingabemethoden verwenden (wie TalkBack, Tecla Access Shield usw. usw.).

Jeroen
quelle
@ Jeroen- Als ich eine Beschreibung hinzufügte, heißt es: "Ressource @ string / loginText konnte nicht aufgelöst werden" - Warum ist das so?
Jamal Zafar
Haben Sie eine loginText-Zeichenfolge in der Zeichenfolge XML?
Praveen
1
@ JamalZafar erstellen Sie eine Zeichenfolge in string.xml mit dem Namen loginText
Ayush Goyal
36

Aktualisiert:

Wie in den Kommentaren erwähnt, bedeutet das Setzen der Beschreibung auf null, dass das Bild rein dekorativ ist und von Bildschirmlesern wie TalkBack so verstanden wird.

Alte Antwort, ich unterstütze diese Antwort nicht mehr:

Für alle, die die Warnung vermeiden möchten:

Ich denke nicht, dass dies android:contentDescription="@null"die beste Lösung ist.

Ich benutze das tools:ignore="ContentDescription", was sein soll.

Stellen Sie sicher, dass Sie xmlns:tools="http://schemas.android.com/tools"in Ihr Root-Layout aufnehmen.

Sotti
quelle
1
Dieser sollte positiv bewertet werden, da er auch von Google empfohlen wird
Le Dinh Nhat Khanh
4
Die Verwendung @nullals Inhaltsbeschreibung ist eine Möglichkeit, explizit zu sagen, dass dieses Bild rein dekorativ ist. Das einfache Ignorieren der Warnung ist nicht die richtige Lösung.
Karl
1
Mit @nullteilt TalkBack mit, dass das Bild dekorativ ist. Sie sollten die Warnung nicht ignorieren, da das Setzen von @nullInformationen TalkBack informiert, anstatt zu glauben, dass es fehlt und vorhanden sein sollte.
Ab
10

Hinzufügen

tools:ignore="ContentDescription"

zu Ihrem Bild. Stellen Sie sicher, dass Sie xmlns:tools="http://schemas.android.com/tools" .in Ihrem Root-Layout haben.

Mwongera808
quelle
1
+1. Dies ist die Lösung von Android Studio für dieses Problem (wenn Sie eine Code-Analyse durchführen, macht die Schaltfläche "Lint unterdrücken" genau das)
noamgot
9

Die Warnung ist in der Tat ärgerlich und in vielen (den meisten!) Fällen ist für verschiedene dekorative ImageViews keine Inhaltsbeschreibung erforderlich. Der radikalste Weg, um das Problem zu lösen, besteht darin, den Lint anzuweisen, diese Prüfung zu ignorieren. Gehen Sie in Eclipse in den Einstellungen zu "Android / Lint Error Checking", suchen Sie "contentDescription" (in der Gruppe "Accessibility") und ändern Sie "Severity:" in "Ignorieren".

AlexR
quelle
9
Ignorieren Sie diese Warnung nicht. Wie andere betont haben, ist Zugänglichkeit wichtig, auch wenn es sich nur um ein dekoratives Bild handelt. Es ist keine große Sache, den gewünschten
Inhalt
1
Sie können die Warnung auch ignorieren, wenn es sich bei Ihrer App um eine App handelt, auf die selbst mit Inhaltsbeschreibungen im Wesentlichen nicht zugegriffen werden kann. Warum sollte man sich zum Beispiel mit contentDescriptioneinem Spiel beschäftigen, das Sehkraft erfordert, um spielen zu können?
CorayThan
Ja, das ist die radikale Wahl. Was machen also Leute, die sich seines Zwecks bewusst sind und sich daran halten möchten? Ich würde sagen, dass in diesem speziellen Fall "die meisten" Fälle vergessen werden; das scheint zu implizieren, dass es eine unnötige Warnung ist, weil "die meisten" Menschen zum Beispiel nicht blind sind? Wenn "die meisten" Ihrer Bilder keinen solchen Inhalt benötigen - in Ordnung, deaktivieren Sie die Warnung, fügen Sie sie jedoch dort hinzu, wo es sinnvoll wäre. Ein bisschen hilfreich zu sein kann einen langen Weg gehen.
ChiefTwoPencils
9

Wenn Sie sich überhaupt nicht darum kümmern, tun Sie Folgendes:

    android:contentDescription="@null"

Obwohl ich die akzeptierten Lösungen empfehlen würde, ist dies ein Hack: D.

alap
quelle
3
Eigentlich glaube ich nicht, dass Android: contentDescription = "@ null" die beste Lösung ist. Ich benutze Tools: ignore = "ContentDescription", so soll es sein. Stellen Sie sicher, dass Sie xmlns: tools = " schemas.android.com/tools " in Ihr Root-Layout aufnehmen.
Sotti
Niemand hat das gesagt. Lesen Sie den Kommentar noch einmal. Sie ignorieren die Warnung einfach, sodass die von Ihnen bereitgestellte Lösung definitiv schlechter ist. Lesen Sie die am meisten akzeptierte Antwort erneut.
Alap
5

Für grafische Elemente, die rein dekorativ sind , ist die beste Lösung für die Zukunft:

android:importantForAccessibility="no"

Dies ist sinnvoll, wenn Ihre min SDK-Version mindestens 16 ist, da Geräte mit niedrigeren Versionen dieses Attribut ignorieren.

Wenn Sie ältere Versionen nicht mehr unterstützen, sollten Sie Folgendes verwenden (wie bereits erwähnt):

android:contentDescription="@null"

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

Arekolek
quelle
2

Diese Warnung versucht, die Zugänglichkeit Ihrer Anwendung zu verbessern.

Um die Warnung zur fehlenden Inhaltsbeschreibung im gesamten Projekt zu deaktivieren, können Sie diese Ihrem Anwendungsmodul build.gradle hinzufügen

android {

    ...

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

Sie erhalten eine Warnung, da die Bildbeschreibung nicht definiert ist.

Wir können diese Warnung beheben, indem wir diesen Code unten in Strings.xml und activity_main.xml hinzufügen

Fügen Sie diese Zeile unten in Strings.xml hinzu

<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" />

Fügen Sie diese Zeile auch in activity_main.xml hinzu

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
quelle