启用TalkBack时,有没有办法将辅助功能焦点手动设置为特定视图?例如,当我的Activity启动时,我希望TalkBack自动关注某个Button(视图周围的黄色框)并阅读其内容描述 .
到目前为止我尝试过的:
myButton.setFocusable(true);
myButton.setFocusableInTouchMode(true);
myButton.requestFocus();
requestFocus()似乎只是请求输入焦点而与可访问性焦点无关 . 我也尝试过:
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
myButton.announceForAccessibility("accessibility test");
myButton.performAccessibilityAction(64, null); // Equivalent to ACTION_ACCESSIBILITY_FOCUS
AccessibilityManager manager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (manager.isEnabled()) {
AccessibilityEvent e = AccessibilityEvent.obtain();
e.setSource(myButton);
e.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
e.setClassName(getClass().getName());
e.setPackageName(getPackageName());
e.getText().add("another accessibility test");
manager.sendAccessibilityEvent(e);
}
这似乎都不起作用 .
1 回答
免责声明:强制将活动负载集中在任何地方,但最重要的是总是(好吧,几乎永远不应该说),但实际上,就是不要这样做 . 它违反了各种WCAG 2.0法规,包括3.2.1和3.2.3,分别涉及可预测的导航和上下文变更 . 实际上,您可能实际上使您的应用程序更难以访问 .
http://www.w3.org/TR/WCAG20/#consistent-behavior
免责声明 .
您正在使用正确的函数调用 . 您需要做的就是:
问题更可能是您尝试这样做的时间点 . 对话会在活动周期的稍后阶段将您的活动与自己的活动联系起来 . 以下解决方案说明了这个问题,老实说,我不确定有更好的方法可以做到这一点 . 我试过onPostResume,这是Android操作系统调用的最后一个回调,关于加载活动,但我仍然需要添加延迟 .
您可以创建自定义视图 . 视图中的回调可以提供您执行此操作所需的逻辑,而不会出现竞争条件!如果我有时间,我可能会在以后更深入地研究它 .