如何消除Android layout.xml中的警告:"missing contentDescription"

8
<ImageView style="@style/LoaderPrevNext.Next" />

使用样式

<style name="LoaderPrevNext">
    <item name="android:layout_width">40dp</item>
    <item name="android:layout_height">80dp</item>
    <item name="android:layout_weight">0</item>
    <item name="android:scaleType">fitXY</item>
</style>

<style name="LoaderPrevNext.Next">
    <item name="android:src">@drawable/next_page</item>
    <item name="android:contentDescription">@string/img_desc_next_page</item>
</style>

我被“[可访问性]图像缺少contentDescription属性”提示所困扰。

如果我将contentDescription从样式移动或复制到ImageView标签中,警告就会消失,但由于src是在样式中定义的,我希望它们保持在一起。

猜测这只是SDK的bug,但有些人可能有解决方法……

澄清:所讨论的ImageView确实具有内容描述,定义在LoaderPrevNext.Next样式中。警告是虚假的。我不关心如何设置内容描述,也不想知道如何将其删除。


https://dev59.com/aWkw5IYBdhLWcg3wqMY1 - PhatHV
8个回答

6

如何解决Android无障碍功能警告缺失contentDescription的问题

这个问题已经有两种回答,虽然都是正确的,但我认为还有更好的解决方法。第一个答案建议关闭所有contentDescription警告。虽然这样做可以解决问题,但contentDescription是有用的,也许不应该全局关闭所有内容的contentDescription

第二个答案展示了如何指定contentDescription。虽然这确实可以消除警告,但并不适用于所有内容,而且从技术上讲不能算是解答此问题,尽管它是一种有效的解决办法。

在 Android Lint 的文档中提供了最佳的解决方案,即对于某些内容提供contentDescription,对于其他内容则抑制lint警告:

请注意,应用程序屏幕上仅为装饰性质、不提供任何内容或不启用用户操作的元素不应具有辅助功能内容描述。在这种情况下,只需使用tools:ignore="ContentDescription"属性抑制lint警告。

因此,实现以下解决方案可消除所有lint警告:

  • 在 XML 布局文件中使用android:contentDescription="Your description here."定义提供有趣或有用信息的资源的contentDescription。以及,
  • 对于纯粹的装饰性内容或图片添加tools:ignore="ContentDescription"

嗨!问题中的ImageView确实具有在LoaderPrevNext.Next样式中定义的content-description。 - vmatyi
1
  1. 你必须在行中添加"xmlns:tools="http://schemas.android.com/tools",才能使用"tools:ignore"。
  2. 如果你有很多纯装饰性的图片,可以在视图层次结构中较高的级别上放置"tools:ignore="ContentDescription""。
- SMBiggs
@vmatyi 也许你可以接受这个答案。根据《工具属性技术文档》(http://tools.android.com/tech-docs/tools-attributes)所述:“Android有一个专用的XML命名空间,旨在让工具能够在XML文件中记录信息,并在打包应用程序时将该信息剥离,以便**没有运行时或下载大小惩罚**。命名空间URI是 http://schemas.android.com/tools ,通常绑定到 tools: 前缀”。 - Weekend

6
在Eclipse中 Window->Preferences->Android->Lint Error Checking->向右滚动,直到找到Accessibility->Content Description->Severity->选择Ignore->应用->是

3
并不是要压制所有这些警告,只是那些有问题的警告。 - vmatyi

4

如果您想在整个项目中禁用缺少内容描述的警告,请将以下内容添加到您的build.gradle文件中:

android {

    ...

    lintOptions {
        disable 'ContentDescription'
    }
}

1
如果您不想关闭/忽略lint警告,您可以在strings.xml中定义一个空字符串。

string.xml:

<string name="empty"></string>

然后在你的xml中设置值即可。

<ImageView
    android:id="..."
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:contentDescription="@string/empty"/>

嗨!问题中的ImageView确实具有在LoaderPrevNext.Next样式中定义的content-description。我不想让它为空。它已经被设置(在样式中),但会生成一个错误警告。 - vmatyi

1

contentDescription 标签用于 Android 屏幕阅读功能。您可以添加关于图像内容的字符串,或者通过添加以下标签来抑制/忽略此警告。

tools:ignore="ContentDescription"

0

< ImageView

android:id= ...

android:layout_width= ... ...

android:contentDescription="在这里输入您的描述。如果是字符串,请从strings xml获取"

/>


0
为什么你想在样式中添加图像描述?
样式的目的是为了能够在一个地方更改某些内容,这些更改会反映在多个地方。
同样适用于@string资源。不要在样式中放置图像描述。使用@string。需要时 - 直接更改该字符串本身即可。

0

我认为正确的解决方案是将其报告为Android Studio中的错误,尽管我怀疑他们不会很快修复它(从我的其他错误报告的经验来看)。https://developer.android.com/studio/report-bugs

很抱歉到目前为止你只得到了与你问题关键元素完全无关的离题回答,以及声称样式不适合做你想要的事情的答案(即使文档从未警告你所尝试的内容)。我来这里是因为我和你一样有同样的问题(在2023年遇到的,我大约在2020年遇到的)。我没有看到Android Studio / Android Lint提供考虑样式的选项。甚至看起来没有不考虑样式的理由,因此不应该有这个选项,任何检查特定属性存在或内容的规则也应该查找style =“”指定的样式。


"I think" 应该是注释而不是答案。 - Ahmed Sbai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接