我正在创建一个自定义视图(扩展View类),并使用Accessibility API来了解其工作原理。 下面是我的代码,其中:
MotionEvent
是否等于ACTION_HOVER_ENTER
,然后在其中发送TYPE_VIEW_HOVER_ENTER
类型的AccessibilityEvent。AccessibilityEvent
中捉住了onPopulateAccessibilityEvent
。然后,我将自定义文本添加到事件的文本中,只需添加即可。 因此,当我将鼠标悬停在视图上时,一切都工作正常(由日志确认),但是TalkBack不会说我的自定义文本。我可以使“话语提示”说出自定义文本的唯一方法是使用setContentDescription("custom text...")
。
但是,据我对API的理解,应该可以根据MotionEvent
的类型以及相应的AccessibilityType
的类型来设置不同的文本。
我的问题-有人可以向我解释一下,如何让“话语提示”说出我的自定义文字,我可以根据事件类型来设置该文字?
@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
}
}