ChatGPT解决这个技术问题 Extra ChatGPT

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

我在 eclipse 中收到关于 [Accessibility]Missing contentDescription attribute on image 的警告。此警告显示在下面 XML 代码的第 5 行(声明 ImageView)。

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

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

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

新的ADT版本建议在imageview中添加android:contentDescription这个属性,只是一个建议,我认为你可以忽略这个,它不会产生编译错误,你也可以检查http://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
是的,这是正确的

C
Community

点击此链接获取解决方案: Android Lint contentDescription warning

通过为我的 ImageView 设置属性 android:contentDescription 解决了此警告.此属性主要用于可访问性。由于某些视图没有文本表示,因此此属性可用于提供此类。像 ImageViews 和 ImageButtons 这样的非文本小部件应该使用 contentDescription 属性来指定小部件的文本描述,以便屏幕阅读器和其他辅助工具可以充分描述用户界面。

这个解释链接: Accessibility, It's Impact and Development Resources

许多 Android 用户有残疾,需要他们以不同的方式与他们的 Android 设备进行交互。其中包括有视觉、身体或年龄相关障碍的用户,这些障碍使他们无法完全看到或使用触摸屏。 Android 提供辅助功能和服务来帮助这些用户更轻松地导航他们的设备,包括文本转语音、触觉反馈、轨迹球和 D-pad 导航,以增强他们的体验。 Android 应用程序开发人员可以利用这些服务来提高他们的应用程序的可访问性,并构建自己的可访问性服务。

本指南旨在让您的应用易于访问: Making Apps More Accessible

确保所有用户都可以访问您的应用程序相对容易,尤其是当您使用框架提供的用户界面组件时。如果您只为您的应用程序使用这些标准组件,则只需几个步骤即可确保您的应用程序可访问:使用 android:contentDescription 属性标记您的 ImageButton、ImageView、EditText、CheckBox 和其他用户界面控件。使用方向控制器(例如轨迹球或方向键)可访问所有用户界面元素。通过打开诸如 TalkBack 和通过触摸探索之类的辅助功能服务来测试您的应用程序,并尝试仅使用方向控件来使用您的应用程序。


还有一个重要的注意事项!在这种情况下,图像看起来纯粹是装饰性的,并没有向用户提供额外的信息。因此,例如,您不想对用户说“联系人图片”,但如果您不在其他任何地方显示该文本,您可能想说“Bob 的个人资料照片”。如果不应该向用户说出图像,您可以设置 android:contentDescription="@null" 并且警告将消失。
@alanv:很棒的评论。比通常建议的完全禁用警告要好得多。
其实我不认为 android:contentDescription="@null" 是最好的解决方案。我正在使用 tools:ignore="ContentDescription" 这就是本意。确保在根布局中包含 xmlns:tools="schemas.android.com/tools"。
谢谢你提供了这么好的文件。当您拥有壁纸库应用程序之类的图像时,是否适合为所有图像添加内容描述?它还会影响应用程序的性能吗?
当在界面中使用某些类型的视图时,这是正确的,它们必须包含描述与该视图关联的目的或操作的内容标签。
J
Jeroen

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


@Jeroen-当我添加描述时,它说:“无法解析资源@string/loginText”-这是为什么呢?
字符串 XML 中有 loginText 字符串吗?
@JamalZafar 在 string.xml 中创建一个名为 loginText 的字符串
通常模式应该是@string/accessibility_your_description
a
arekolek

更新:

正如评论中所指出的,将 description 设置为 null 表示该图像纯粹是装饰性的,并且被 TalkBack 等屏幕阅读器理解为图像。

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

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

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

我正在使用 tools:ignore="ContentDescription",这就是本意。

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


这个应该被赞成,因为它也是谷歌推荐的
使用 @null 作为 contentDescription 是一种明确表示此图像纯粹是装饰性的方式。简单地忽略警告不是正确的解决方案。
使用 @null 告诉 TalkBack 图片是装饰性的。您不应忽略该警告,因为输入 @null 会通知 TalkBack,而不是让它认为它丢失并且应该存在。
a
arekolek

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

android:importantForAccessibility="no"

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

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

android:contentDescription="@null"

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


M
Mwongera808

添加

tools:ignore="ContentDescription"

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


+1。这是 Android Studio 对这个问题的修复(当你执行代码分析时,“抑制 Lint”按钮就是这样做的)
不要忽略内容描述。您需要确定 imageview 代表什么:装饰性的或重要的东西。看看这里的其他选项。
A
AlexR

该警告确实很烦人,在许多(大多数!)情况下,各种装饰性 ImageView 都不需要 contentDescription。解决问题的最根本方法就是告诉 Lint 忽略此检查。在 Eclipse 中,转到 Preferences 中的“Android/Lint Error Checking”,找到“contentDescription”(它在“Accessibility”组中)并将“Severity:”更改为 Ignore。


不要忽略此警告。正如其他人指出的那样,即使它只是一个装饰性图像,可访问性也很重要。添加所需的内容描述没什么大不了的
如果您的应用是一个即使有内容描述也基本上无法访问的应用,您也可以忽略该警告。例如,为什么要在需要视力才能玩的游戏中使用 contentDescription
是的,这是激进的选择;那么知道它的目的并愿意遵守的人们会怎么做呢?我敢说,在这种特殊情况下,忘记“大多数”情况;这似乎意味着因为“大多数”人不是盲人,例如,这是一个不必要的警告?如果您的“大多数”图像不需要此类内容 - 很好,请禁用警告,但将其添加到有意义的地方。有点帮助可以走很长的路。
还值得记住的是,许多使用屏幕阅读器或辅助技术的人至少有一些视力,因此可能能够玩游戏,但不能阅读或看到某些文本、图标、图像或颜色。因此,即使您无法预见,拥有相关的内容描述也可能对人们有所帮助。
a
alap

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

    android:contentDescription="@null"

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


其实我不认为 android:contentDescription="@null" 是最好的解决方案。我正在使用 tools:ignore="ContentDescription" 这就是本意。确保在根布局中包含 xmlns:tools="schemas.android.com/tools"。
没有人这么说。再次阅读评论。您只是忽略警告,因此您提供的解决方案肯定会更糟。再次阅读最被接受的答案。
M
Maksim Turaev

此警告试图改善您的应用程序的可访问性。

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

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}

C
Community

它给你警告,因为图像描述没有定义。

我们可以通过在 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"

字符串.xml

<resources>
    <string name="app_name">Saini_Browser</string>
    <string name="SainiBrowser">textView2</string>
    <string name="imgDescription">BackGround Picture</string>
</resources>

谢谢,而不是忽略警告,每个人都应该了解发生了什么,谢谢 Kuldeep Singh 先生
A
Aniket Jain

还要在 XML 中添加这一行

android:contentDescription="@null"

activity_main.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"
        android:contentDescription="@null"
        />
    <TextView
        android:id="@+id/contact_entry_text"
        android:text=""
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        />

</LinearLayout>


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅