«Отсутствует атрибут contentDescription на изображении» в XML

222

Я получаю предупреждение об отсутствии атрибута [Accessibility] contentDescription на изображении в затмении. Это предупреждение показано в строке 5 (объявить ImageView) в XML-коде ниже.

Это не делает никаких ошибок при сборке и запуске моего приложения. Но я действительно хочу знать, почему я получаю это предупреждение.

Это мой 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>

Пожалуйста, помогите мне в этом и спасибо за ваше чтение.

PhatHV
источник
6
предложение новой версии ADT добавить android:contentDescriptionэтот атрибут imageview, просто предложение, я думаю, вы можете проигнорировать это, оно не делает ошибку компиляции, также вы можете проверитьhttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger
да, это правильно
Рахул Кушваха

Ответы:

269

Перейдите по этой ссылке для решения: Android Lint contentDescription warning

Решил это предупреждение, установив атрибут android: contentDescription для моего ImageView

андроид: contentDescription = "@ строки / убыв"

Поддержка Android Lint в ADT 16 выдает это предупреждение, чтобы гарантировать, что виджеты изображений предоставляют contentDescription

Это определяет текст, который кратко описывает содержание представления. Это свойство используется в основном для доступности. Поскольку некоторые представления не имеют текстового представления, этот атрибут можно использовать для предоставления такого.

Нетекстовые виджеты, такие как ImageViews и ImageButtons, должны использовать атрибут contentDescription, чтобы указать текстовое описание виджета, чтобы программы чтения с экрана и другие инструменты доступности могли адекватно описывать пользовательский интерфейс.

Ссылка для объяснения: доступность, влияние и ресурсы для разработки.

У многих пользователей Android есть недостатки, которые требуют от них взаимодействия с их устройствами Android по-разному. К ним относятся пользователи, которые имеют визуальные, физические или возрастные нарушения, которые мешают им полностью видеть или использовать сенсорный экран.

Android предоставляет специальные возможности и услуги, помогающие этим пользователям легче ориентироваться в своих устройствах, включая преобразование текста в речь, тактильную обратную связь, трекбол и навигацию по D-pad, что расширяет их возможности. Разработчики приложений Android могут воспользоваться этими услугами, чтобы сделать свои приложения более доступными, а также создать свои собственные службы доступности.

Это руководство для того, чтобы сделать ваше приложение доступным: сделать приложения более доступными

Убедиться, что ваше приложение доступно для всех пользователей, относительно легко, особенно если вы используете компоненты пользовательского интерфейса, предоставляемые платформой. Если вы используете только эти стандартные компоненты для своего приложения, для обеспечения доступности вашего приложения требуется всего несколько шагов:

  1. Пометьте свой ImageButton , ImageView , EditText , CheckBox и другие элементы управления пользовательского интерфейса, используя атрибут android: contentDescription .

  2. Сделайте все элементы пользовательского интерфейса доступными с помощью контроллера направления, например трекбола или D-pad.

  3. Протестируйте свое приложение, включив службы специальных возможностей, такие как TalkBack и Explore by Touch, и попробуйте использовать свое приложение, используя только средства управления направлением.

PhatHV
источник
92
Еще одно важное замечание! В этом случае выглядит, как будто изображение чисто декоративное и не предоставляет дополнительной информации пользователю. Так, например, вы не захотите говорить «изображение контакта» пользователю, но вы можете захотеть сказать «фото профиля Боба», если этот текст больше нигде не отображается. Если пользователю не нужно говорить изображение, вы можете установить android: contentDescription = "@ null", и предупреждение исчезнет.
Alanv
1
@alanv: отличный комментарий. Гораздо лучше, чем полное отключение предупреждения, как обычно рекомендуется.
ChiefTwoPencils
14
На самом деле я не думаю, что Android: contentDescription = "@ null" является лучшим решением. Я использую инструменты: ignore = "ContentDescription", что и должно быть. Убедитесь, что вы включили xmlns: tools = " schemas.android.com/tools " в корневой макет.
Сотти
спасибо за предоставленный такой хороший документ. Если у вас есть изображения, например, приложение для галереи обоев, можно ли добавить описание содержимого для всех изображений? а также может ли это повлиять на производительность приложения?
Рахул Мандалия
67

Добавьте android:contentDescription="@string/description"(статический или динамический) в ваш ImageView. Пожалуйста, не игнорируйте и не фильтруйте сообщение, потому что оно полезно для людей, использующих альтернативные методы ввода из-за их инвалидности (например, TalkBack, Tecla Access Shield и т. Д.).

Йерун
источник
@ Jeroen - Когда я добавил описание, он говорит: «Не удалось разрешить ресурс @ string / loginText» - Почему это так?
Джамал Зафар
У вас есть строка loginText в строке XML?
Правин
1
@JamalZafar создать строку в string.xml с именем loginText
Ayush GOYAL
36

Обновлено:

Как указано в комментариях, установка описания на ноль указывает на то, что изображение является чисто декоративным и понимается как средство чтения с экрана, например TalkBack.

Старый ответ, я больше не поддерживаю этот ответ:

Для всех людей, ищущих, как избежать предупреждения:

Я не думаю, что android:contentDescription="@null"это лучшее решение.

Я использую tools:ignore="ContentDescription"то, что должно быть.

Убедитесь, что вы включили xmlns:tools="http://schemas.android.com/tools"в свой корневой макет.

Sotti
источник
1
За это следует проголосовать, потому что это также то, что Google рекомендовал
Le Dinh Nhat Khanh
4
Использование @nullв качестве contentDescription - это способ явно сказать, что это изображение чисто декоративное. Простое игнорирование предупреждения не является правильным решением.
Карлу
1
Использование @nullговорит TalkBack, что изображение является декоративным. Вы не должны игнорировать предупреждение, поскольку размещение @nullинформирует TalkBack, а не заставляет его думать, что оно отсутствует и должно быть там.
Ab
10

Добавить

tools:ignore="ContentDescription"

к вашему образу. Убедитесь, что у вас есть xmlns:tools="http://schemas.android.com/tools" .в вашем корневом макете.

Mwongera808
источник
1
+1. Это исправление Android Studio для этой проблемы (когда вы выполняете анализ кода, кнопка «
Suppress
9

Предупреждение действительно раздражает, и во многих (большинстве!) Случаях для различных декоративных ImageViews не требуется contentDescription. Самый радикальный способ решить проблему - просто попросить Линт проигнорировать эту проверку. В Eclipse перейдите к «Проверка ошибок Android / Lint» в «Настройках», найдите «contentDescription» (он находится в группе «Доступность») и измените «Серьезность:» на «Пропустить».

AlexR
источник
9
Не игнорируйте это предупреждение. Как уже отмечали другие, доступность важна, даже если это просто декоративное изображение. Нет ничего сложного в том, чтобы добавить нужный контентDescription
jamesc
1
Вы также можете игнорировать предупреждение, если ваше приложение будет по существу недоступным даже с описаниями контента. Например, зачем contentDescriptionиграть в игру, в которой требуется зрение, чтобы играть?
CorayThan
Да, это радикальный выбор; так, что делают люди, которые знают о его цели и хотели бы подчиниться? Я бы рискнул сказать, что в данном конкретном случае забудьте о «большинстве» случаев; Кажется, это означает, что "большинство" людей, например, не слепы, это ненужное предупреждение? Если «большинству» ваших изображений такой контент не нужен - хорошо, отключите предупреждение, но добавьте его там, где это имеет смысл. Быть немного полезным может иметь большое значение.
ChiefTwoPencils
9

Если вам все равно, сделайте это:

    android:contentDescription="@null"

Хотя я бы посоветовал принятые решения, это хак: D

Алап
источник
3
На самом деле я не думаю, что Android: contentDescription = "@ null" является лучшим решением. Я использую инструменты: ignore = "ContentDescription", что и должно быть. Убедитесь, что вы включили xmlns: tools = " schemas.android.com/tools " в корневой макет.
Сотти
Никто не сказал это. Прочитайте комментарий снова. Вы просто игнорируете предупреждение, поэтому решение, которое вы предлагаете, явно хуже. Прочитайте наиболее принятый ответ еще раз.
Алап
5

В дальнейшем, для графических элементов, которые являются чисто декоративными , лучшим решением будет использование:

android:importantForAccessibility="no"

Это имеет смысл, если ваша минимальная версия SDK не менее 16, поскольку устройства с более низкими версиями будут игнорировать этот атрибут.

Если вы застряли с поддержкой более старых версий, вы должны использовать (как уже отмечали другие):

android:contentDescription="@null"

Источник: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements

arekolek
источник
2

Это предупреждение пытается улучшить доступность вашего приложения.

Чтобы отключить предупреждение о пропущенном описании контента во всем проекте, вы можете добавить его в свой модуль приложения build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Максим Тураев
источник
0

Это дает вам предупреждение, потому что описание изображения не определено.

Мы можем устранить это предупреждение, добавив этот код ниже в Strings.xml и activity_main.xml

Добавьте эту строку ниже в 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" />

Также добавьте эту строку в 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>
Кулдип Сингх
источник