首页 > 解决方案 > [Android]:触发 AccessibilityEvent 时 TalkBack 不说话

问题描述

我正在创建一个自定义视图(扩展 View 类)并使用 Accessibility API 来了解它是如何工作的。下面是我的代码,其中:

  1. 我检查MotionEvent等于ACTION_HOVER_ENTER,然后在其中发送类型为 AccessibilityEvent TYPE_VIEW_HOVER_ENTER
  2. 我赶上我AccessibilityEventonPopulateAccessibilityEvent。然后我将我的自定义文本添加到事件的文本中,添加得很好。

结果,当我将鼠标悬停在视图上时,一切正常(由我的日志确认),但 TalkBack 没有说出我的自定义文本。我能够让 TalkBack 说出自定义文本的唯一方法是使用setContentDescription("custom text...").

但是,按照我理解 API 的方式,应该可以根据 的类型MotionEvent和相应的AccessibilityType.

我的问题 - 有人可以向我解释一下,我怎样才能让 TalkBack 说出我可以根据事件类型设置的自定义文本?

@Override
    public boolean onHoverEvent(MotionEvent event) {
        final int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_HOVER_ENTER:
                Log.d("test", "onHoverEvent: ACTION_HOVER_ENTER"); // <-- this is triggered correctly on hover enter
                sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
                return true;
        }
        return super.onHoverEvent(event);
    }

    @Override
    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
        super.onPopulateAccessibilityEvent(event);
        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_HOVER_ENTER) {
            Log.d("test", "onPopulateAccessibilityEvent");
            CharSequence text = "this is a test";
            Log.d("test", "text before: " + event.getText()); // text before is empty, i.e. "[]"
            event.getText().add(text);
            Log.d("test", "text after: " + event.getText()); // text after is "[this is a test]", but TalkBack is silent
        }
    }

标签: androidaccessibilitytalkback

解决方案


推荐阅读