我在 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>
请帮助我解决这个问题,并感谢您的阅读。
imageview
中添加android:contentDescription
这个属性,只是一个建议,我认为你可以忽略这个,它不会产生编译错误,你也可以检查http://developer.android.com/reference/android/view/View.html#attr_android:contentDescription
点击此链接获取解决方案: 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 和通过触摸探索之类的辅助功能服务来测试您的应用程序,并尝试仅使用方向控件来使用您的应用程序。
将 android:contentDescription="@string/description"
(静态或动态)添加到您的 ImageView。请不要忽略或过滤该消息,因为它对因残疾而使用替代输入法的人很有帮助(如 TalkBack、Tecla Access Shield 等)。
更新:
正如评论中所指出的,将 description 设置为 null 表示该图像纯粹是装饰性的,并且被 TalkBack 等屏幕阅读器理解为图像。
老答案,我不再支持这个答案:
对于所有寻找如何避免警告的人:
我不认为 android:contentDescription="@null"
是最好的解决方案。
我正在使用 tools:ignore="ContentDescription"
,这就是本意。
确保在根布局中包含 xmlns:tools="http://schemas.android.com/tools"
。
@null
作为 contentDescription 是一种明确表示此图像纯粹是装饰性的方式。简单地忽略警告不是正确的解决方案。
@null
告诉 TalkBack 图片是装饰性的。您不应忽略该警告,因为输入 @null
会通知 TalkBack,而不是让它认为它丢失并且应该存在。
展望未来,对于纯装饰性的图形元素,最好的解决方案是使用:
android:importantForAccessibility="no"
如果您的最低 SDK 版本至少为 16,这是有意义的,因为运行较低版本的设备将忽略此属性。
如果你坚持支持旧版本,你应该使用(就像其他人已经指出的那样):
android:contentDescription="@null"
来源:https://developer.android.com/guide/topics/ui/accessibility/apps#label-elements
添加
tools:ignore="ContentDescription"
到你的形象。确保您的根布局中有 xmlns:tools="http://schemas.android.com/tools" .
。
该警告确实很烦人,在许多(大多数!)情况下,各种装饰性 ImageView 都不需要 contentDescription。解决问题的最根本方法就是告诉 Lint 忽略此检查。在 Eclipse 中,转到 Preferences 中的“Android/Lint Error Checking”,找到“contentDescription”(它在“Accessibility”组中)并将“Severity:”更改为 Ignore。
contentDescription
?
如果您根本不在乎,请执行以下操作:
android:contentDescription="@null"
虽然我会建议接受的解决方案,但这是一个 hack:D
此警告试图改善您的应用程序的可访问性。
要在整个项目中禁用缺少内容描述警告,您可以将其添加到您的应用程序模块 build.gradle
android {
...
lintOptions {
disable 'ContentDescription'
}
}
它给你警告,因为图像描述没有定义。
我们可以通过在 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>
还要在 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>