启用 TalkBack 后,是否可以将辅助功能焦点手册设置为特定 View ?例如,当我的 Activity 启动时,我希望 TalkBack 自动关注某个 Button( View 周围的黄框)并阅读其内容描述。
到目前为止我已经尝试过:
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);
}
这些似乎都不起作用。
最佳答案
免责声明:强制将 Activity 加载的焦点放在任何地方,但始终位于顶部栏(好吧,几乎永远不应该说),但实际上,只是不要这样做。它违反了 WCAG 2.0 的各种规定,包括 3.2.1 和 3.2.3,分别关于可预测的导航和上下文变化。通过这样做,您实际上可能会使您的应用更难以访问。
http://www.w3.org/TR/WCAG20/#consistent-behavior
结束免责声明。
您正在使用正确的函数调用。您需要做的就是:
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
问题更可能是您尝试执行此操作的点。对讲会在 Activity 周期稍晚一点的时候附加到您的 Activity 中。以下解决方案说明了这个问题,老实说,我不确定是否有更好的方法来做到这一点。我尝试了 onPostResume,这是 Android 操作系统调用的最后一个回调,关于加载 Activity ,但我仍然不得不添加延迟。
@Override
protected void onPostResume() {
super.onPostResume();
Log.wtf(this.getClass().getSimpleName(), "onPostResume");
Runnable task = new Runnable() {
@Override
public void run() {
Button theButton = (Button)WelcomeScreen.this.findViewById(R.id.idButton);
theButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
}
};
final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
worker.schedule(task, 5, TimeUnit.SECONDS);
}
您也许可以创建自定义 View 。 View 中的回调可能会提供您需要执行此操作的逻辑,而无需竞争条件!如果有时间,我可能会再研究一下。
关于Android - 将 TalkBack 辅助功能焦点设置到特定 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472985/