android - [Android]:触发 AccessibilityEvent 时 TalkBack 不说话
问题描述
我正在创建一个自定义视图(扩展 View 类)并使用 Accessibility API 来了解它是如何工作的。下面是我的代码,其中:
- 我检查
MotionEvent
等于ACTION_HOVER_ENTER
,然后在其中发送类型为 AccessibilityEventTYPE_VIEW_HOVER_ENTER
。 - 我赶上我
AccessibilityEvent
的onPopulateAccessibilityEvent
。然后我将我的自定义文本添加到事件的文本中,添加得很好。
结果,当我将鼠标悬停在视图上时,一切正常(由我的日志确认),但 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
}
}
解决方案
推荐阅读
- c# - 任务和从 api 逻辑反序列化对象和反序列化 json
- azureservicebus - 将 splitOn 与逻辑应用上的服务总线触发器一起使用时如何保留消息标头
- laravel - 如何在 PayPal 中覆盖没有复选框的送货地址
- git - 如何阻止用户访问 Visual Studio Online 上的 git repo
- angular - Angular 5+中装饰器@Injectable的明确含义
- c# - 准备好的 MySQL 语句插入失败,没有错误
- java - 具有基本身份验证的 ODATA 4J 发布方法
- javascript - 如何在模式内提交时隐藏表格列
- javascript - 如何访问已经在循环对象中的数组中的嵌套对象
- sql - JSL 选择带有关键字和括号的查询