我正在构建一个将在Android设备上运行的web应用程序。该设备具有其他软件,可通过Android InputMethod((API创建文本输入。如果我的web应用程序上的输入字段有焦点,则此文本将正确插入到输入字段中。问题是,如果在web应用程序中的输入字段没有焦点时发生此InputMethod文本事件,则文本将丢失。我需要始终能够通过Android InputMethod((API读取文本,但它不会生成任何keydown/keyup/keypress事件,所以我有点不确定这是否可能。有什么想法吗?
最好的答案是,你可能无法通过网络应用程序做到这一点,你需要编写一个真正的本地应用程序。但这里有一个关于发生了什么的解释。
InputMethod通过InputConnection进行通信。当视图接收到焦点时,会对该视图调用getInputConnection((。如果返回非null,则视图表示它有能力接受输入数据,并且输入连接将连接到IME(键盘(,数据/请求将通过InputConnection发送。因此,数据只有在通过视图绑定时才从键盘发送。
您可以通过关注视图、重写getInputConnection((函数并监听对它的各种调用(特别是commitText(((来获取输入数据。但在web应用程序中,您唯一拥有的视图是WebView本身。覆盖其getInputConnection函数可能会破坏正常的web文本视图。所以我没想到会这样。
当然,这通常不是问题,因为除非文本字段被聚焦,否则软键盘通常不会显示,所以你实际上不会遇到这个问题,尽管你可以通过几种方式迫使键盘向上移动。