"Attributo contentDescription mancante sull'immagine" in XML


222

Ricevo un avviso su [Accessibilità] Attributo contentDescription mancante sull'immagine in eclissi. Questo avviso mostra alla riga 5 (dichiara ImageView) nel codice XML di seguito.

Questo non fa alcun errore durante la compilazione e l'esecuzione della mia applicazione. Ma voglio davvero sapere perché ricevo questo avviso.

Questo è il mio file 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>

Per favore aiutatemi riguardo a questo e grazie per la vostra lettura.


6
il nuovo suggerimento versione ADT aggiunge android:contentDescriptionquesto attributo imageview, solo un suggerimento, penso che tu possa ignorarlo, non commette l'errore di compilazione, inoltre puoi controllarehttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger

sì, è vero
Rahul Kushwaha,

Risposte:


269

Segui questo collegamento per la soluzione: contenuto di Lint Android Avviso di descrizione

Risolto questo avviso impostando l'attributo android: contentDescription per il mio ImageView

Android: contentDescription = "@ string / disc"

Il supporto Android Lint in ADT 16 genera questo avviso per garantire che i widget di immagini forniscano una descrizione del contenuto

Questo definisce il testo che descrive brevemente il contenuto della vista. Questa proprietà viene utilizzata principalmente per l'accessibilità. Poiché alcune viste non hanno una rappresentazione testuale, questo attributo può essere utilizzato per fornire tale.

I widget non testuali come ImageViews e ImageButtons dovrebbero usare l'attributo contentDescription per specificare una descrizione testuale del widget in modo tale che gli screen reader e altri strumenti di accessibilità possano descrivere adeguatamente l'interfaccia utente.

Questo link per la spiegazione: accessibilità, impatto e risorse di sviluppo

Molti utenti Android hanno disabilità che richiedono loro di interagire con i loro dispositivi Android in diversi modi. Questi includono utenti con disabilità visive, fisiche o legate all'età che impediscono loro di vedere o utilizzare completamente un touchscreen.

Android offre funzionalità e servizi di accessibilità per aiutare questi utenti a navigare più facilmente nei loro dispositivi, tra cui sintesi vocale, feedback tattile, trackball e navigazione D-pad che migliora la loro esperienza. Gli sviluppatori di applicazioni Android possono usufruire di questi servizi per rendere le loro applicazioni più accessibili e anche per creare i propri servizi di accessibilità.

Questa guida è per rendere accessibile la tua app: Rendere le app più accessibili

Accertarsi che l'applicazione sia accessibile a tutti gli utenti è relativamente semplice, in particolare quando si utilizzano componenti dell'interfaccia utente forniti dal framework. Se si utilizzano solo questi componenti standard per l'applicazione, sono necessari solo alcuni passaggi per garantire che l'applicazione sia accessibile:

  1. Etichetta il tuo ImageButton , ImageView , EditText , CheckBox e altri controlli dell'interfaccia utente usando l' attributo android: contentDescription .

  2. Rendi accessibili tutti gli elementi dell'interfaccia utente con un controller direzionale, come una trackball o un D-pad.

  3. Metti alla prova la tua applicazione attivando servizi di accessibilità come TalkBack ed Explore by Touch e prova a utilizzare l'applicazione utilizzando solo i controlli direzionali.


92
Un'altra nota importante! In questo caso, sembra che l'immagine sia puramente decorativa e non fornisca ulteriori informazioni all'utente. Quindi, ad esempio, non vorrai parlare "Immagine di contatto" all'utente, ma potresti voler parlare di "Foto del profilo di Bob" se non mostri quel testo da nessun'altra parte. Se un'immagine non deve essere pronunciata all'utente, puoi impostare android: contentDescription = "@ null" e l'avvertimento sparirà.
alanv

1
@alanv: ottimo commento. Molto meglio che disabilitare completamente l'avviso come comunemente consigliato.
ChiefTwoPencils,

13
In realtà non penso Android: contentDescription = "@ null" è la soluzione migliore. Sto usando strumenti: ignore = "ContentDescription" che è quello che dovrebbe essere. Assicurati di includere xmlns: tools = " schemas.android.com/tools " nel layout di root.
Sotti,

grazie per averci fornito un documento così carino. quando possiedi immagini come l'app della galleria di sfondi, è adatto aggiungere la descrizione del contenuto per tutte le immagini? e può anche influire sulle prestazioni dell'app?
Rahul Mandaliya,

67

Aggiungi android:contentDescription="@string/description"(statico o dinamico) a ImageView. Si prega di non ignorare né filtrare il messaggio, perché è utile per le persone che utilizzano metodi di input alternativi a causa della loro disabilità (come TalkBack, Tecla Access Shield ecc. Ecc.).


@ Jeroen- Quando ho aggiunto la descrizione, sta dicendo: "Impossibile risolvere la risorsa @ stringa / loginText" - Perché?
Jamal Zafar,

Hai una stringa loginText nell'XML della stringa?
Praveen,

1
@JamalZafar crea una stringa in string.xml con il nome loginText
Ayush Goyal

36

aggiornato:

Come sottolineato nei commenti, l'impostazione della descrizione su null indica che l'immagine è puramente decorativa ed è intesa come quella da lettori di schermo come TalkBack.

Vecchia risposta, non sostengo più questa risposta:

Per tutte le persone che cercano come evitare l'avvertimento:

Non credo android:contentDescription="@null"sia la soluzione migliore.

sto usando tools:ignore="ContentDescription" questo è ciò che dovrebbe essere.

Assicurati di includere xmlns:tools="http://schemas.android.com/tools"nel layout di root.


1
Questo dovrebbe essere votato perché è anche quello che Google ha raccomandato
Le Dinh Nhat Khanh,

4
Usare @nullcome contentDescription è un modo per dire esplicitamente che questa immagine è puramente decorativa. Ignorare semplicemente l'avviso non è la soluzione corretta.
karl

1
L'uso di @nulldice a TalkBack che l'immagine è decorativa. Non dovresti ignorare l'avvertimento perché mettere @nullinforma TalkBack piuttosto che farlo pensare che manchi e dovrebbe essere lì.
Ab

10

Inserisci

tools:ignore="ContentDescription"

alla tua immagine. Assicurati di avere xmlns:tools="http://schemas.android.com/tools" .nel tuo layout di root.


1
+1. Questa è la soluzione di Android Studio per questo problema (quando esegui l'analisi del codice, il pulsante "sopprimere Lint" fa proprio questo)
noamgot

9

L'avvertimento è davvero fastidioso e in molti (quasi!) Nessun contenuto La descrizione è necessaria per varie ImageView decorative. Il modo più radicale di risolvere il problema è solo dire a Lint di ignorare questo controllo. In Eclipse, vai su "Controllo errori Android / Lint" in Preferenze, trova "contentDescription" (è nel gruppo "Accessibilità") e cambia "Gravità:" in Ignora.


9
Non ignorare questo avviso. Come altri hanno sottolineato, l'accessibilità è importante anche se è solo un'immagine decorativa. Aggiungere il contenuto desiderato non è un problema
Descrizione

1
Puoi anche ignorare l'avvertimento se la tua app sarà sostanzialmente inaccessibile anche con le descrizioni dei contenuti. Ad esempio, perché preoccuparsi contentDescriptiondi un gioco che richiede vista per poter giocare?
Coray:

Sì, questa è la scelta radicale; quindi cosa fanno le persone che sono consapevoli del suo scopo e vorrebbero rispettarlo? Mi azzarderei a dire che in questo caso particolare, dimentica "la maggior parte" dei casi; ciò sembra implicare che, poiché la maggior parte delle persone non sono, ad esempio, cieche è un avvertimento inutile? Se "la maggior parte" delle tue immagini non ha bisogno di tali contenuti, va bene, disabilita l'avviso, ma aggiungilo dove avrebbe senso. Essere un po 'utili può fare molto.
ChiefTwoPencils,

9

Se non ti interessa affatto, fai questo:

    android:contentDescription="@null"

Anche se consiglierei le soluzioni accettate, questo è un trucco: D


3
In realtà non penso Android: contentDescription = "@ null" è la soluzione migliore. Sto usando strumenti: ignore = "ContentDescription" che è quello che dovrebbe essere. Assicurati di includere xmlns: tools = " schemas.android.com/tools " nel layout di root.
Sotti,

Nessuno l'ha detto. Leggi di nuovo il commento. Ignorate semplicemente l'avviso, quindi la soluzione che fornite è decisamente peggiore. Leggi di nuovo la risposta più accettata.
alap il

5

In futuro, per gli elementi grafici puramente decorativi , la soluzione migliore è utilizzare:

android:importantForAccessibility="no"

Questo ha senso se la tua versione minima dell'SDK è almeno 16, poiché i dispositivi che eseguono versioni inferiori ignoreranno questo attributo.

Se sei bloccato a supportare versioni precedenti, dovresti usare (come altri già sottolineato):

android:contentDescription="@null"

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


2

Questo avviso tenta di migliorare l'accessibilità dell'applicazione.

Per disabilitare l'avviso relativo alla descrizione del contenuto mancante nell'intero progetto, è possibile aggiungere questo al modulo di applicazione build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}

0

Ti sta dando l'avvertimento perché la descrizione dell'immagine non è definita.

Possiamo risolvere questo avviso aggiungendo questo codice di seguito in Strings.xml e activity_main.xml

Aggiungi questa riga di seguito in 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" />

Aggiungi anche questa riga in 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.