我正在编写无障碍服务。我一直试图以弹出软件键盘的方式集中 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 有点少。我愿意尝试任何事情。