XML中"缺少图像上的contentDescription属性"

Pha*_*tHV 207 eclipse android warnings accessibility android-imageview

我在eclipse中的图像上收到关于[辅助功能]缺少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>
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题并感谢您的阅读.

Pha*_*tHV 261

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

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

机器人:contentDescription = "@字符串/递减"

ADT 16中的Android Lint支持会抛出此警告,以确保图像窗口小部件提供contentDescription

这定义了简要描述视图内容的文本.此属性主要用于辅助功能.由于某些视图没有文本表示,因此该属性可用于提供此类属性.

像ImageViews和ImageButtons这样的非文本小部件应该使用contentDescription属性来指定小部件的文本描述,以便屏幕阅读器和其他可访问性工具可以充分描述用户界面.

此链接用于解释: 可访问性,它的影响和开发资源

许多Android用户都需要他们以不同的方式与他们的Android设备进行互动.这些用户包括视力,身体或年龄相关的残疾,这些用户无法完全看到或使用触摸屏.

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

本指南旨在让您的应用可访问: 使应用更易于访问

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

  1. 使用android:contentDescription属性标记ImageButton,ImageView,EditText,CheckBox和其他用户界面控件.

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

  3. 通过启用TalkBack和Explore by Touch等辅助功能服务来测试您的应用程序,并尝试仅使用方向控件来使用您的应用程序.

  • 一个更重要的说明!在这种情况下,看起来图像纯粹是装饰性的,并且不向用户提供附加信息.因此,例如,您不希望向用户说"联系人图像",但如果您没有在其他任何地方显示该文本,您可能想要说"Bob的个人资料照片".如果不应该向用户说出图像,则可以设置android:contentDescription ="@ null",警告将消失. (85认同)
  • 其实我不认为android:contentDescription ="@ null"是最好的解决方案.我正在使用工具:ignore ="ContentDescription"就是这个意思.确保在根布局中包含xmlns:tools ="http://schemas.android.com/tools". (9认同)

小智 65

添加android:contentDescription="@string/description"(静态或动态)到ImageView.请不要忽略或过滤消息,因为它有助于使用替代输入方法的人因为他们的残疾(如TalkBack,Tecla Access Shield等).


Sot*_*tti 33

更新:

正如评论中指出的那样,将描述设置为null表示该图像纯粹是装饰性的,并且被像TalkBack这样的屏幕阅读器理解.

老答案,我不再支持这个答案:

对于所有寻求如何避免警告的人:

我认为不是android:contentDescription="@null"最好的解决方案.

我正在使用tools:ignore="ContentDescription"那就是意味着什么.

确保包含xmlns:tools="http://schemas.android.com/tools"在根布局中.

  • 使用`@ null`作为contentDescription是一种明确表示此图像纯粹是装饰性的方式.简单地忽略警告不是正确的解决方案. (4认同)
  • 使用 `@null` 告诉 TalkBack 图像是装饰性的。您不应该忽略警告,因为放置 `@null` 会通知 TalkBack,而不是让它认为它丢失了并且应该在那里。 (4认同)

are*_*lek 12

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

android:importantForAccessibility="no"
Run Code Online (Sandbox Code Playgroud)

如果您的最小 SDK 版本至少为 16,这很有意义,因为运行较低版本的设备将忽略此属性。

如果你坚持支持旧版本,你应该使用(就像其他人已经指出的那样):

android:contentDescription="@null"
Run Code Online (Sandbox Code Playgroud)

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


小智 10

tools:ignore="ContentDescription"
Run Code Online (Sandbox Code Playgroud)

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

  • 不要忽略内容描述。您需要确定图像视图代表什么:装饰性的,还是重要的东西。看看这里的其他选项。 (2认同)

小智 9

警告确实令人讨厌,并且在许多(大多数!)情况下,各种装饰性ImageView都不需要contentDescription.解决问题最根本的方法就是告诉Lint忽略这个检查.在Eclipse中,转到"首选项"中的"Android/Lint错误检查",找到"contentDescription"(它位于"辅助功能"组中)并将"严重性:"更改为"忽略".

  • 不要忽视这个警告.正如其他人所指出的那样,即使只是装饰性的形象,可访问性也很重要.添加所需的contentDescription没什么大不了的 (9认同)
  • 如果您的应用程序即使有内容描述也基本上无法访问,您也可以忽略该警告。例如,为什么要在需要视觉才能玩的游戏中使用 `contentDescription`? (2认同)

ala*_*lap 9

如果你根本不关心这样做:

    android:contentDescription="@null"
Run Code Online (Sandbox Code Playgroud)

虽然我会建议接受的解决方案,但这是一个黑客:D

  • 其实我不认为android:contentDescription ="@ null"是最好的解决方案.我正在使用工具:ignore ="ContentDescription"就是这个意思.确保在根布局中包含xmlns:tools ="http://schemas.android.com/tools". (3认同)

Mak*_*aev 7

此警告试图提高应用程序的可访问性。

要在整个项目中禁用缺少内容描述警告,您可以将其添加到您的应用程序模块 build.gradle

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}
Run Code Online (Sandbox Code Playgroud)