初始化时如何防止Spinner通知

时间:2017-06-22 20:07:56

标签: android android-spinner talkback android-accessibility

背景

片段创建它的视图,然后开始网络操作。网络操作完成后,将根据网络操作的结果创建各种类型的子视图并将其添加到片段视图中。

问题

如果片段添加了Spinner,则它的初始值由TalkBack公布。这是非常不受欢迎的,因为Spinner通常深埋在表格中。

失败的解决方案

我试过了:

  1. 使用setImportantForAccessibility
  2. 包装addView
  3. 未设置初始Spinner值(在任何情况下都不是可接受的解决方案),但初始值仍会在添加时公布
  4. Spinner的{​​{1}}设置为不间断的空格,然后在contentDescription *
  5. 中添加和恢复它

    问题

    最初创建片段后,会创建

    onAttachedToWindow并动态添加。如何防止TalkBack宣布Spinner的初始值?

2 个答案:

答案 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();