【发布时间】:2014-10-27 20:48:14
【问题描述】:
我正在编写无障碍服务。我一直在尝试以弹出软件键盘的方式集中 EditText 字段,但我没有成功。我可以将光标移到 EditText 字段中,但没有弹出软键盘。鉴于 EditTextNode 是我从各种可访问性事件中获得的 AccessibilityNodeInfo,并且当我尝试所有这些操作时说 nodeInfo isEditable、isFocusable、isVisibleToUser 和 isClickable,并且它们在完成后都返回 true。
editTextNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
在我看来,上述内容应该可以正常工作,而且事实上它不是 Accessibility API 中的一个错误,如果不是针对我的整个 android 版本,至少在我的设备上(Droid Ultra,Android 4.4.4 )。我也试过:
editTextNode.performAction(AccessibilityNodeInfo.ACTION_FOCUS);
将焦点放在字段中,以便我可以看到输入光标,但没有键盘。
editTextNode.performAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
除非启用对讲功能,否则不会真正做任何事情。
editTextNode.performAction(AccessibilityNodeInfo.ACTION_SET_SELECTION, someBundle);
与适当的参数一起,这将起作用,但前提是 editText 字段中已经存在文本。我还需要在空文本字段上拉起键盘。是的,我尝试为开始和结束文本选择参数输入 0,0。 SET_SELECTION 方法仅适用于字段中的文本!
这几天让我很沮丧,希望你们能帮忙。虽然我相信我偶然发现了一个错误,并且将不得不等待 Android 更新。因为 ACTION_CLICK 方法应该是真正需要的。但是,我可能会遗漏一些愚蠢的东西,Accessibility API Doc 有点少。我愿意尝试任何事情。
【问题讨论】:
-
你是对的,这是可访问性 API 中的错误。 AccessibilityNodeInfo.ACTION_CLICK 从 Android 5.0 (v21) 开始启动软键盘,但在早期版本中无法正常工作。调出软键盘的唯一方法是用户双击,这将触发系统向文本字段发送 DOWN/UP 触摸事件对并调出软键盘。
-
所以 TL;DR 没有办法通过 API 21 之前的辅助功能服务以编程方式执行此操作。
标签: android accessibilityservice accessibility-api