XML中的“图像上缺少contentDescription属性”


222

我在Eclipse中收到有关[Accessibility] Missing contentDescription属性的警告。此警告显示在ImageView下面的XML代码的第5行(声明)。

在构建和运行我的应用程序时,这不会出错。但是我真的很想知道为什么我会收到这个警告。

这是我的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 2012年

是的,没错
Rahul Kushwaha

Answers:


269

请点击以下链接获取解决方案: Android Lint contentDescription警告

通过为我的ImageView设置属性android:contentDescription解决了此警告

android:contentDescription =“ @ string / desc”

ADT 16中对Android Lint的支持会引发此警告,以确保图像小部件提供内容描述

这定义了简短描述视图内容的文本。此属性主要用于可访问性。由于某些视图没有文本表示,因此可以使用此属性来提供此类表示。

非文本小部件(如ImageViews和ImageButtons)应使用contentDescription属性指定小部件的文本说明,以便屏幕阅读器和其他辅助功能工具可以充分描述用户界面。

该链接的解释: 可访问性,影响和开发资源

许多Android用户有残疾,要求他们以不同的方式与Android设备进行交互。其中包括视力,身体或年龄相关的残障人士,他们无法完全看到或使用触摸屏。

Android提供了辅助功能和服务,以帮助这些用户更轻松地导航其设备,包括文本语音转换,触觉反馈,轨迹球和D-pad导航,以增强他们的体验。Android应用程序开发人员可以利用这些服务使他们的应用程序更易于访问,并构建自己的可访问性服务。

本指南用于使您的应用程序可访问性: 使应用程序更易于访问

确保所有用户均可访问您的应用程序相对容易,尤其是在使用框架提供的用户界面组件时。如果仅对应用程序使用这些标准组件,则只需执行以下几个步骤即可确保您的应用程序可访问:

  1. 使用android:contentDescription属性为ImageButtonImageViewEditTextCheckBox和其他用户界面控件添加标签。

  2. 使所有用户界面元素都可以通过方向控制器(例如轨迹球或D-pad)访问。

  3. 通过打开“话语提示”和“触摸浏览”之类的辅助功能来测试您的应用程序,然后尝试仅使用方向控件来使用您的应用程序。


92
还有一个重要的提示!在这种情况下,图像看起来纯粹是装饰性的,并且不向用户提供其他信息。因此,例如,您不想与用户说“联系人图像”,但是如果您不在其他地方显示该文本,则可能想说“鲍勃的个人资料照片”。如果不应该向用户说出图像,则可以设置android:contentDescription =“ @ null”,警告就会消失。
alanv

1
@alanv:很棒的评论。比通常建议完全禁用警告要好得多。
ChiefTwoPencils 2014年

13
其实我不认为android:contentDescription =“ @ null”是最好的解决方案。我正在使用tools:ignore =“ ContentDescription”就是这个意思。确保在根布局中包含xmlns:tools =“ schemas.android.com/tools ”。
索蒂2014年

感谢您提供如此出色的文档。当您拥有墙纸画廊应用程序之类的图像时,是否适合为所有图像添加内容描述?还会影响应用程序性能吗?
拉胡尔·曼达里亚

67

android:contentDescription="@string/description"向您的ImageView 添加(静态或动态)。请不要忽略或过滤该消息,因为它对残疾人使用替代输入法(例如话语提示,Tecla Access Shield等)很有帮助。


@ Jeroen-当我添加描述时,它说:“无法解析资源@ string / loginText”-为什么?
Jamal Zafar

字符串XML中是否有loginText字符串?
Praveen

1
@JamalZafar在string.xml中创建一个名为loginText的字符串
Ayush Goyal,

36

更新:

正如评论中指出的那样,将描述设置为null表示该图像纯粹是装饰性的,并且被诸如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告诉“话语提示”该图像是装饰性的。您不应忽略警告,因为放置@null通知会告诉TalkBack,而不是让它认为它已丢失,应该放在那里。
抗体

10

tools:ignore="ContentDescription"

到你的形象。确保您具有xmlns:tools="http://schemas.android.com/tools" .根目录布局。


1
+1。这是Android Studio的解决此问题的方法(当您执行代码分析时,“抑制Lint”按钮就可以解决此问题)
noamgot

9

该警告确实很烦人,并且在许多(大多数情况下)情况下,对于各种装饰性ImageView而言,都不需要contentDescription。解决问题的最根本方法就是告诉Lint忽略此检查。在Eclipse中,转到“偏好设置”中的“ Android / Lint错误检查”,找到“ contentDescription”(位于“可访问性”组中),然后将“严重性:”更改为“忽略”。


9
不要忽略此警告。正如其他人指出的那样,可访问性很重要,即使它只是装饰性的形象。添加所需的contentDescription没什么大不了的
jamesc 2013年

1
如果您的应用程序即使是内容描述也基本上不可访问,则也可以忽略该警告。例如,为什么要打扰contentDescription需要视力才能玩的游戏?
CorayThan

是的,这根本选择;那么知道目标并愿意遵守的人们会做什么呢?我敢说,在这种特殊情况下,请忘记“大多数”情况;这似乎意味着,因为例如“大多数”人不是盲目的,这是不必要的警告吗?如果您的“大多数”图像不需要这些内容-可以,禁用警告,然后将其添加到有意义的位置。有所帮助可以大有帮助。
ChiefTwoPencils 2014年

9

如果您根本不在乎,请执行以下操作:

    android:contentDescription="@null"

尽管我会建议接受的解决方案,但这是一个hack:D


3
其实我不认为android:contentDescription =“ @ null”是最好的解决方案。我正在使用tools:ignore =“ ContentDescription”就是这个意思。确保在根布局中包含xmlns:tools =“ schemas.android.com/tools ”。
索蒂2014年

没有人这么说。再次阅读评论。您只需忽略警告,因此提供的解决方案肯定会更糟。再次阅读最被接受的答案。
2014年

5

展望未来,对于纯装饰性图形元素,最好的解决方案是使用:

android:importantForAccessibility="no"

如果您的最低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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.