返回

如何防止TalkBack读取标记为重要的装饰性图片?

Android

TalkBack绕过标记的"importantForAccessibility=no",读取装饰性图片

前言

对于视觉受损者来说,屏幕阅读器是必不可少的辅助工具,可以帮助他们访问和交互应用程序。TalkBack是Android设备上的一个流行屏幕阅读器,它通过提供文本到语音反馈来协助用户。然而,当用户突出显示某些布局元素时,TalkBack有时会绕过importantForAccessibility属性标记,并尝试读出装饰性图片,从而导致冗长的无用。

问题

在典型的应用程序中,可能会存在包含装饰性图像的布局,这些图像仅用于视觉目的,与该元素的可用性无关。为了确保屏幕阅读器用户获得清晰简洁的体验,开发人员可以将这些图像标记为importantForAccessibility="no"。此标记旨在指示屏幕阅读器忽略该元素,专注于更重要的内容。

然而,在某些情况下,即使将图像标记为importantForAccessibility="no",TalkBack仍会尝试读出其内容,例如:“检测到:图像,[含糊的描述]”。这会给用户造成混乱,并降低屏幕阅读器的整体可用性。

影响及原因

这一问题可能会对屏幕阅读器用户的体验产生负面影响,具体表现如下:

  • 冗长且不必要的 TalkBack对图像的自动描述可能会很冗长,从而打断用户对重要内容的关注。
  • 触摸目标尺寸减少: 当TalkBack试图读出图像时,它会将其视为一个可交互元素,从而减少了用户可以使用文本视图进行触摸交互的可用空间。
  • 可用性不一致: 即使是同一应用程序中标记相同的元素,TalkBack对图像的处理方式也不一致,这可能会使用户感到困惑。

这一问题通常是由TalkBack的自动描述功能引起的,该功能旨在帮助用户了解屏幕上的内容,包括图像。然而,在标记为importantForAccessibility="no"的情况下,此功能不应该被触发。

解决方法

虽然没有直接的方法可以防止TalkBack读取标记为importantForAccessibility="no"的图像,但有一些变通方法可以缓解这一问题:

  • 将图像标记为"focusable=false": 将图像标记为focusable="false"可以防止TalkBack将其视为可交互元素,从而有效地使其不可读。
  • 使用内容描述替代项: 对于包含重要视觉信息的图像,可以使用内容描述属性(android:contentDescription)提供该信息的文本替代。这样,TalkBack可以读出替代文本,而不是图像本身。
  • 调整TalkBack设置: 在某些设备上,用户可以禁用TalkBack的自动描述功能,但这并不总是可行。

示例代码

以下示例代码演示了如何使用focusable="false"属性解决此问题:

<LinearLayout
    android:id="@+id/savingsLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:importantForAccessibility="yes"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/savingsIcon"
        android:layout_width="..."
        android:layout_height="..."
        android:importantForAccessibility="no"
        android:src="@drawable/ic_logo"
        android:focusable="false" />

    <TextView
        android:id="@+id/savingsAmount"
        android:layout_width="..."
        android:layout_height="..."
        android:importantForAccessibility="no"
        tools:text="You saved £7.15 this time" />

</LinearLayout>

结论

虽然importantForAccessibility属性对于指示屏幕阅读器忽略装饰性图片非常有用,但它可能无法始终有效地防止TalkBack对其进行描述。通过使用本文中介绍的解决方法,开发人员可以减轻这一问题,为屏幕阅读器用户提供更清晰、更有效的体验。

常见问题解答

  1. 为什么TalkBack会绕过importantForAccessibility标记?

    • TalkBack的自动描述功能旨在帮助用户了解屏幕上的内容,包括图像,即使它们被标记为不重要。
  2. 如何完全防止TalkBack读取图像?

    • 没有直接的方法,但将图像标记为focusable="false"可以有效地使其不可读。
  3. 我可以在哪些设备上禁用TalkBack的自动描述?

    • 此功能可在某些设备上禁用,但这并不总是可行。
  4. 是否有其他解决此问题的替代方法?

    • 使用内容描述替代文本可以提供图像信息的替代文本。
  5. 此问题会影响所有屏幕阅读器吗?

    • 此问题主要是TalkBack特定的,其他屏幕阅读器可能对其处理方式不同。