Android 可访问性 IMPORTANT_FOR_ACCESSIBILITY_NO 不受尊重

Android accessibility IMPORTANT_FOR_ACCESSIBILITY_NO is not respected

在我的应用程序中,我在底部有广告,在辅助功能(对讲)模式下我不希望包含广告。为此,我已将此 AdView 及其父项设置为 IMPORTANT_FOR_ACCESSIBILITY_NOfocusable = false,但当应用程序启动时(启用对讲),第一个获得焦点的项目是此广告。

我请求将焦点放在所需的项目上,但广告仍处于焦点状态,如何才能使此广告不可聚焦?

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

android:importantForAccessibility="noHideDescendants"

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

IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS

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

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

android:descendantFocusability="blocksDescendants"

我的要求是将焦点分配给屏幕中的第一个元素,这是我使用以下方法实现的:

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

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

直接来自文档

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

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