'Falta el atributo contentDescription en la imagen' en XML

222

Recibo una advertencia sobre [Accesibilidad] Falta el atributo contentDescription en la imagen en eclipse. Esta advertencia se muestra en la línea 5 (declarar ImageView) en el código XML a continuación.

Esto no hace ningún error al compilar y ejecutar mi aplicación. Pero realmente quiero saber por qué recibo esta advertencia.

Este es mi archivo 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, ayúdame con respecto a esto y gracias por tu lectura.

PhatHV
fuente
66
la nueva sugerencia de la versión ADT agrega android:contentDescriptioneste atributo imageview, solo una sugerencia, creo que puede ignorar esto, no comete el error de compilación, también puede verificarlohttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
sí, eso es correcto
Rahul Kushwaha

Respuestas:

269

Siga este enlace para la solución: contenido de Android Lint Advertencia de descripción

Resolvió esta advertencia estableciendo el atributo android: contentDescription para mi ImageView

android: contentDescription = "@ string / desc"

La compatibilidad con Android Lint en ADT 16 arroja esta advertencia para garantizar que los widgets de imagen proporcionen un contenido.

Esto define el texto que describe brevemente el contenido de la vista. Esta propiedad se usa principalmente para accesibilidad. Dado que algunas vistas no tienen representación textual, este atributo se puede utilizar para proporcionarlo.

Los widgets no textuales como ImageViews e ImageButtons deben usar el atributo contentDescription para especificar una descripción textual del widget de modo que los lectores de pantalla y otras herramientas de accesibilidad puedan describir adecuadamente la interfaz de usuario.

Este enlace para explicación: accesibilidad, impacto y recursos de desarrollo

Muchos usuarios de Android tienen discapacidades que requieren que interactúen con sus dispositivos Android de diferentes maneras. Estos incluyen usuarios que tienen discapacidades visuales, físicas o relacionadas con la edad que les impiden ver completamente o usar una pantalla táctil.

Android ofrece funciones y servicios de accesibilidad para ayudar a estos usuarios a navegar por sus dispositivos con mayor facilidad, incluyendo texto a voz, retroalimentación háptica, trackball y navegación D-pad que aumenta su experiencia. Los desarrolladores de aplicaciones de Android pueden aprovechar estos servicios para hacer que sus aplicaciones sean más accesibles y también crear sus propios servicios de accesibilidad.

Esta guía es para hacer que su aplicación sea accesible: hacer que las aplicaciones sean más accesibles

Asegurarse de que su aplicación sea accesible para todos los usuarios es relativamente fácil, especialmente cuando utiliza componentes de interfaz de usuario proporcionados por el marco. Si solo usa estos componentes estándar para su aplicación, solo se requieren algunos pasos para garantizar que su aplicación sea accesible:

  1. Etiquete su ImageButton , ImageView , EditText , CheckBox y otros controles de interfaz de usuario utilizando elatributo android: contentDescription .

  2. Haga que todos los elementos de su interfaz de usuario sean accesibles con un controlador direccional, como un trackball o un D-pad.

  3. Pruebe su aplicación activando los servicios de accesibilidad como TalkBack y Explore by Touch, e intente usar su aplicación usando solo controles direccionales.

PhatHV
fuente
92
¡Una nota más importante! En este caso, parece que la imagen es puramente decorativa y no proporciona información adicional al usuario. Entonces, por ejemplo, no le gustaría hablar "Imagen de contacto" al usuario, pero puede decirle "Foto de perfil de Bob" si no muestra ese texto en ningún otro lugar. Si una imagen no se debe hablar al usuario, puede configurar android: contentDescription = "@ null" y la advertencia desaparecerá.
alanv
1
@alanv: gran comentario. Mucho mejor que deshabilitar la advertencia por completo como se recomienda comúnmente.
ChiefTwoPencils
13
En realidad, no creo que android: contentDescription = "@ null" sea la mejor solución. Estoy usando herramientas: ignore = "ContentDescription", que es lo que debe ser. Asegúrese de incluir xmlns: tools = " schemas.android.com/tools " en su diseño raíz.
Sotti
Gracias por proporcionar un documento tan agradable. cuando tiene muchas imágenes como la aplicación de galería de fondos de pantalla, ¿es adecuado agregar una descripción de contenido para todas las imágenes? y también puede afectar el rendimiento de la aplicación?
Rahul Mandaliya
67

Agregue android:contentDescription="@string/description"(estático o dinámico) a su ImageView. No ignore ni filtre el mensaje, ya que es útil para las personas que utilizan métodos de entrada alternativos debido a su discapacidad (como TalkBack, Tecla Access Shield, etc.).

Jeroen
fuente
@ Jeroen- Cuando agregué la descripción, dice: "No se pudo resolver resource @ string / loginText" - ¿Por qué es eso?
Jamal Zafar
¿Tiene una cadena loginText en la cadena XML?
Praveen
1
@JamalZafar crea una cadena en string.xml con el nombre loginText
Ayush Goyal
36

Actualizado:

Como se señaló en los comentarios, establecer la descripción como nula indica que la imagen es puramente decorativa y los lectores de pantalla como TalkBack la entienden así.

Antigua respuesta, ya no apoyo esta respuesta:

Para todas las personas que buscan cómo evitar la advertencia:

No creo que android:contentDescription="@null"sea ​​la mejor solución.

Estoy usando tools:ignore="ContentDescription" eso es lo que debe ser.

Asegúrese de incluir xmlns:tools="http://schemas.android.com/tools"en su diseño de raíz.

Sotti
fuente
1
Este debería ser votado porque también es lo que Google recomendó
Le Dinh Nhat Khanh el
44
Usar @nullcomo contenido Descripción es una forma de decir explícitamente que esta imagen es puramente decorativa. Simplemente ignorar la advertencia no es la solución correcta.
karl
1
El uso @nullle dice a TalkBack que la imagen es decorativa. No debe ignorar la advertencia, ya que poner @nullTalkBack informa en lugar de hacer que piense que falta y que debería estar allí.
Ab
10

Añadir

tools:ignore="ContentDescription"

a tu imagen. Asegúrese de tener xmlns:tools="http://schemas.android.com/tools" .en su diseño de raíz.

Mwongera808
fuente
1
+1. Esta es la solución de Android Studio para este problema (cuando realiza el análisis de código, el botón "suprimir pelusa" hace exactamente eso)
noamgot
9

La advertencia es realmente molesta y, en muchos casos (¡la mayoría!), No es necesaria la descripción de contenido para varias ImageViews decorativas. La forma más radical de resolver el problema es simplemente decirle a la pelusa que ignore esta verificación. En Eclipse, vaya a "Android / Lint Error Checking" en Preferencias, busque "contentDescription" (está en el grupo "Accesibilidad") y cambie "Severity:" a Ignore.

AlexR
fuente
99
No ignore esta advertencia. Como otros han señalado, la accesibilidad es importante incluso si se trata solo de una imagen decorativa. No es gran cosa agregar el contenido deseado Descripción
jamesc
1
También puede ignorar la advertencia si su aplicación es esencialmente inaccesible incluso con descripciones de contenido. Por ejemplo, ¿por qué molestarse contentDescriptionen un juego que requiere vista para poder jugar?
CorayThan
Sí, esa es la elección radical; Entonces, ¿qué hacen las personas que son conscientes de su propósito y les gustaría cumplir? Me atrevería a decir que en este caso particular, olvida "la mayoría" de los casos; eso parece estar implicando que porque "la mayoría" de las personas no son, por ejemplo, ciegas, ¿es una advertencia innecesaria? Si "la mayoría" de sus imágenes no necesita ese contenido, está bien, desactive la advertencia, pero agréguela donde tenga sentido. Ser un poco útil puede ser de gran ayuda.
ChiefTwoPencils
9

Si no te importa, haz esto:

    android:contentDescription="@null"

Aunque recomendaría las soluciones aceptadas, este es un truco: D

alap
fuente
3
En realidad, no creo que android: contentDescription = "@ null" sea la mejor solución. Estoy usando herramientas: ignore = "ContentDescription", que es lo que debe ser. Asegúrese de incluir xmlns: tools = " schemas.android.com/tools " en su diseño raíz.
Sotti
Nadie dijo eso. Lee el comentario nuevamente. Simplemente ignora la advertencia, por lo que la solución que proporciona es definitivamente peor. Lea la respuesta más aceptada nuevamente.
alap
5

En el futuro, para los elementos gráficos que son puramente decorativos , la mejor solución es usar:

android:importantForAccessibility="no"

Esto tiene sentido si su versión mínima de SDK es de al menos 16, ya que los dispositivos que ejecutan versiones inferiores ignorarán este atributo.

Si está atascado admitiendo versiones anteriores, debe usar (como ya señalaron otros):

android:contentDescription="@null"

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

arekolek
fuente
2

Esta advertencia intenta mejorar la accesibilidad de su aplicación.

Para deshabilitar la advertencia de descripción de contenido faltante en todo el proyecto, puede agregar esto al módulo de aplicación build.gradle

android {

    ...

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

Le da la advertencia porque la descripción de la imagen no está definida.

Podemos resolver esta advertencia agregando este código a continuación en Strings.xml y activity_main.xml

Agregue esta línea a continuación en 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" />

Agregue también esta línea en 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
fuente