TalkBack:防止选择被遮挡的视图

4

Bad TalkBack Image

在上面的图片中,您可以看到TalkBack已选择了一个完全被遮挡的标签。如果我再次点击,那么顶部的整个面板将被选中(它被设置为可聚焦),这是期望的行为。
如何防止TalkBack选择完全(或部分)被遮挡的视图进行通告?
至少,我如何强制TalkBack首先选择顶部/遮挡视图?
3个回答

1
您可以添加以下代码,这样TalkBack将会忽略该视图/图片:
android:importantForAccessibility="no"

更新的答案:

当视图被遮挡时,将其设置为遮挡的根视图:

mainContentView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);

然后,当您重新打开该视图时,请执行以下操作:
mainContentView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);

1
这将永久禁用它。顶部的面板/视图有时可见,有时不可见。我想在被遮挡时禁用被遮挡的视图,但仅限于被遮挡时。此外,这是在SDK中进行的,因此我实际上不知道哪些视图可能会被遮挡,因为它们属于我的SDK的用户,而不是我自己。 - David Berry
嘿,@DavidBerry,你有没有解决这个问题的办法?我也遇到了同样的问题,已经没有任何选择该怎么处理它了。 - rgreso
@rgreso 不是很确定。仍然希望我有更好的答案。 - David Berry

0

所以,没有足够的信息完全回答这个问题。不清楚您的“学习更多”是否是一个模态对话框,因此需要处理,或者它可以保留在屏幕上,并且与布局中较低的内容交互仍然可以访问。

情况1:假设“了解更多”对话框是必须在其他所有操作之前处理的模态对话框,您需要使用自定义AlertDialog。 Android系统将设置所有重要属性,而不需要不同的权限。在这种情况下,Android OS最终会添加一个TYPE_SYSTEM_ALERT视图,这确保对话框是屏幕上唯一可操作的东西(也是唯一可访问的!)。

https://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout

场景2: "了解更多"横幅不是模态框。您想要做的是隐藏横幅后面的视图。您可以通过设置view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);来实现。


场景2更像是一个横幅,而不是模态框。未被遮挡的视图仍然可用。我认为我应该在被遮挡的视图上使用setImportantForAccessibility?但我不确定它是否真正起作用,因为部分遮挡的视图仍然应该是可访问的,只是不完全可见。 - David Berry
你也可以通过将整个横幅设置为触摸目标(可访问性可聚焦),从而解决此问题,这实际上相当准确地反映了正在发生的事情。然后添加一个可访问性代理,并在用户使用手势导航来聚焦被遮挡的控件时向下滚动。这种编码有点复杂,但如果您赞成这种解决方案,我会给您提供一个原型版本。 - MobA11y
我想我尝试将整个视图设置为可聚焦,但仍无法防止辅助功能触摸穿透到底层视图。 - David Berry
现在SDK手动将其添加到活动的内容视图中(activity.findViewById(android.R.id.content))。 - David Berry
不是这样的,但让我看看我能否提供一个最小可重现案例。 - David Berry
显示剩余3条评论

0

使用布局检查器找到该标签并将其可见性移除。

根据 Android 文档,打开布局检查器,请执行以下操作:

  1. 在连接的设备或模拟器上运行您的应用程序。

  2. 单击“工具”>“布局检查器”。

  3. 在出现的“选择进程”对话框中,选择要检查的应用程序进程,然后单击“确定”。

  4. 布局检查器会捕获快照,将其保存为 .li 文件并打开它。

以编程方式或在布局文件中将可见性设置为 GONE:

android:visibility="gone"

或者

nameOfLabel.setVisibility(View.GONE)

这并不是一个可行的解决方案,原因有两个,其中最大的原因是我没有拥有/控制底层视图,只有覆盖层。 - David Berry

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