"Атрибут 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>

Будь ласка, допоможіть мені з цього приводу і дякую за прочитане.


6
нова версія версії ADT додайте android:contentDescriptionцей атрибут imageview, просто пропозицію, я думаю, ви можете проігнорувати це, він не робить помилку компіляції, також ви можете перевіритиhttp://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
idiottiger

так, це правильно
Рахул

Відповіді:


269

Перейдіть за цим посиланням для рішення: Вміст Android LintЗастереження про опис

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

android: contentDescription = "@ string / desc"

Підтримка Android Lint в ADT 16 кидає це попередження, щоб переконатися, що віджети зображень надають contentDescription

Це визначає текст, який коротко описує зміст перегляду. Ця властивість використовується насамперед для доступності. Оскільки деякі представлення не мають текстового подання, цей атрибут може використовуватися для надання такого.

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

Це посилання для пояснення: доступність, це вплив та ресурси розвитку

Багато користувачів Android мають інвалідність, яка вимагає від них взаємодії зі своїми пристроями Android різними способами. Сюди входять користувачі, які мають зорові, фізичні та вікові обмеження, які заважають їм повністю бачити або використовувати сенсорний екран.

Android надає функції та доступності для того, щоб допомогти цим користувачам легше орієнтуватися на своїх пристроях, включаючи текст у мовлення, тактичний зворотний зв'язок, трекбол та навігацію на панелі даних, що збільшує їхній досвід. Розробники додатків Android можуть скористатися цими послугами, щоб зробити їхні програми більш доступними, а також створити власні служби доступності.

Це посібник дозволяє зробити доступним ваш додаток: Зробити додатки більш доступними

Переконатися, що ваша програма доступна для всіх користувачів порівняно просто, особливо коли ви використовуєте компоненти, що надаються рамковим інтерфейсом користувача. Якщо ви використовуєте для своєї програми лише ці стандартні компоненти, для забезпечення доступності вашої програми потрібно лише кілька кроків:

  1. Позначте свої ImageButton , ImageView , EditText , CheckBox та інші елементи управління інтерфейсом за допомогою android: contentDescription атрибута .

  2. Зробіть доступ до всіх елементів вашого інтерфейсу користувача за допомогою контролера спрямованості, наприклад, трекбола або D-pad.

  3. Перевірте свою програму, включивши служби доступності, такі як TalkBack та Explore by Touch, і спробуйте використовувати свою програму, використовуючи лише напрямки управління.


92
Ще одна важлива примітка! У цьому випадку схоже, що зображення є чисто декоративним і не дає додаткової інформації користувачеві. Так, наприклад, ви не хочете говорити користувачеві "Контактне зображення", але ви можете сказати "фотографія профілю Боба", якщо ви не показуєте цей текст ніде більше. Якщо зображення не слід говорити користувачеві, ви можете встановити android: contentDescription = "@ null", і попередження відключиться.
alanv

1
@alanv: чудовий коментар. Набагато краще, ніж відключити попередження повністю, як зазвичай радять.
ChiefTwoPencils

13
Насправді я не думаю, що андроїд: 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?
Praveen

1
@JamalZafar створити рядок в string.xml з ім'ям loginText
Ayush GOYAL

36

Оновлено:

Як зазначалося в коментарях, встановлення опису на нуль вказує на те, що зображення є чисто декоративним і його розуміють читачі екранів, як TalkBack.

Стара відповідь, я більше не підтримую цю відповідь:

Для всіх людей, які шукають, як уникнути попередження:

Я не думаю, що android:contentDescription="@null"це найкраще рішення.

Я використовую tools:ignore="ContentDescription" це те, що має бути.

Переконайтеся, що ви включили xmlns:tools="http://schemas.android.com/tools"у свій кореневий макет.


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" .кореневий макет.


1
+1. Це виправлення цієї проблеми в Android Studio (коли ви виконуєте аналіз коду, кнопка "придушити Lint" робить саме це)
noamgot

9

Попередження справді дратує, і у багатьох (у більшості!) Випадків відсутність вмісту. Опис не потрібен для різних декоративних зображень ImageView. Найрадикальніший спосіб вирішити проблему - просто сказати Лінту проігнорувати цю перевірку. У програмі Eclipse перейдіть до "Перевірка помилок Android / Lint" у налаштуваннях, знайдіть "Опис вмісту" (це в групі "Доступність") та змініть "Серйозність:" на Ігнорувати.


9
Не ігноруйте це попередження. Як зазначають інші, доступність важлива, навіть якщо це лише декоративний образ. Не важливо додавати потрібний контентОпис
jamesc

1
Ви можете також ігнорувати попередження, якщо ваш додаток буде суттєво недоступним навіть з описом вмісту. Наприклад, навіщо турбуватися contentDescriptionв грі, яка потребує зору, щоб мати можливість грати?
CorayThan

Так, це радикальний вибір; то що роблять люди, які усвідомлюють свою мету і хотіли б виконувати? Я б ризикну сказати, що в цьому конкретному випадку забудьте "більшість" випадків; це, мабуть, означає, що оскільки "більшість" людей, наприклад, не сліпі, це непотрібне попередження? Якщо "більшості" ваших зображень не потрібен такий вміст - добре, вимкніть попередження, але додайте його там, де це було б сенсом. Будучи трохи корисною, можна пройти довгий шлях.
ChiefTwoPencils

9

Якщо вам зовсім не байдуже, зробіть це:

    android:contentDescription="@null"

Хоча я б порадив прийняті рішення, це хак: D


3
Насправді я не думаю, що андроїд: contentDescription = "@ null" - найкраще рішення. Я використовую інструменти: ignore = "ContentDescription", що саме має бути. Переконайтесь, що ви включили xmlns: tools = " schemas.android.com/tools " у свій макет кореня.
Сотті

Ніхто цього не сказав. Прочитайте коментар ще раз. Ви просто ігноруєте попередження, тому рішення, яке ви надаєте, безумовно гірше. Ще раз прочитайте найбільш прийняту відповідь.
ввечері

5

Вперед, найкраще рішення для графічних елементів, які є суто декоративними :

android:importantForAccessibility="no"

Це має сенс, якщо ваша версія min SDK становить принаймні 16, оскільки пристрої, на яких працює нижча версія, ігнорують цей атрибут.

Якщо ви застрягли в підтримці більш старих версій, вам слід скористатися (як уже вказували інші):

android:contentDescription="@null"

Джерело: https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements


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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.