【问题标题】:Android accessibility IMPORTANT_FOR_ACCESSIBILITY_NO is not respected不尊重 Android 可访问性 IMPORTANT_FOR_ACCESSIBILITY_NO
【发布时间】:2020-02-19 18:01:52
【问题描述】:

在我的应用程序底部有广告,在可访问性(对讲)模式下,我不希望包含广告。为此,我已将此AdView 及其父级设置为IMPORTANT_FOR_ACCESSIBILITY_NOfocusable = false,但在应用启动时它不受尊重(启用对讲)第一个获得焦点的项目是此广告。

我请求焦点到所需的项目,但广告仍处于焦点状态,如何使该广告无法获得焦点?

【问题讨论】:

  • 如果我理解正确,那么首先会阅读广告?
  • 焦点,即可访问性标记位于广告上,双击它将作用于广告

标签: android accessibility talkback


【解决方案1】:

当您将importantForAccessibility 设置为no 时,您只会隐藏单个视图。您想找到广告的布局,并隐藏它及其所有后代。

android:importantForAccessibility="noHideDescendants"

如果您想以编程方式进行,您正在寻找的常量是:

IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS

注意:您绝对不应该这样做。广告对每个人来说都很烦人。分开不等于。通过向 VoiceOver 隐藏信息,甚至是烦人的信息,您至少违反了 WCag 2.0 的六项标准,并使您的应用程序更难访问。

【讨论】:

  • 嗨@ChrisCM,我正在开发android应用程序以使其可访问,我是可访问性的新手并且在实施中面临问题,我在这里发布了另一个问题:@ 987654321@希望你能帮助我那谢谢
  • 不同意不这样做的声明(但我同意这种观点)- AdView 不在您的应用程序的控制范围内,我上次检查时,无法使用 TalkBack 访问它(无内容描述)。我认为隐藏它是合理和恰当的。
  • 如果元素中没有可访问的内容,其中“后代”已被隐藏,结果将与未隐藏一样。如果里面有可访问的元素,那么我们已经清楚地向用户隐藏了一些内容。我们想要这样做的唯一时间是,当这个内容也被视觉隐藏时,可访问性 API 仍然可以访问它,因为你决定以一种愚蠢的方式隐藏它(例如:让它变得清晰彩色)。这是我发现的唯一例外。我对其他人持开放态度,但是,您的示例肯定不是其中之一。
【解决方案2】:

这是我为实现的目标所做的 我已经阻止了广告视图在最后添加到视图时默认获得的后代焦点能力。将 adview 包装在布局中并添加属性。

android:descendantFocusability="blocksDescendants"

我的要求是将焦点分配给我使用的屏幕中的第一个元素:

firstView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
firstView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);

我仍然同意我们不应该改变焦点的观点,但这只是在广告的情况下。 广告仍可通过触摸获得焦点。

【讨论】:

    【解决方案3】:

    直接来自文档

    android:importantForAccessibility 描述此视图对于可访问性是否重要。如果它很重要,视图会触发辅助功能事件并报告给查询屏幕的辅助功能服务。 注意:虽然不推荐,但无障碍服务可能会决定忽略此属性并对视图树中的所有视图进行操作。

    尽管该注释本身没有意义:什么不推荐,不推荐给谁?但可能意味着实际的无障碍服务(对讲等)可能不会考虑此功能。根据我的经验,它在 API23 中不起作用,但在 webview 的 26 中起作用。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2011-04-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2018-03-07
      • 2019-08-01
      • 1970-01-01
      相关资源
      最近更新 更多