背景
片段创建它的视图,然后开始网络操作。网络操作完成后,将根据网络操作的结果创建各种类型的子视图并将其添加到片段视图中。
问题
如果片段添加了Spinner
,则它的初始值由TalkBack公布。这是非常不受欢迎的,因为Spinner通常深埋在表格中。
失败的解决方案
我试过了:
setImportantForAccessibility
Spinner
值(在任何情况下都不是可接受的解决方案),但初始值仍会在添加时公布Spinner
的{{1}}设置为不间断的空格,然后在contentDescription
* 问题
最初创建片段后,会创建 onAttachedToWindow
并动态添加。如何防止TalkBack宣布Spinner
的初始值?
答案 0 :(得分:1)
这是我在项目中所做的一种解决方法,它按预期工作,即Spinner的内容只有在TalkBack成为焦点时才能读出。
我将AppCompatSpinner
类子类化并覆盖其onInitializeAccessibilityEvent
函数,如下所示:
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
super.onInitializeAccessibilityEvent(event);
}
}
答案 1 :(得分:0)
1)在onCreate()中为表单中的所有微调器设置重要的可访问性为false。
spinner.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
2)setOnHoverListener到每个微调器并在其内部再次启用辅助功能并发送辅助功能事件以正确宣告它们。
spinner.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
spinner.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
spinner.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
spinner.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
3)setOnTouchListener到每个微调器以在双击后执行单击。
spinner.performClick();