把文本发送给应用程序
当用户用你的IME输入文本时,你可以通过发送单独的按键事件或应用程序的文本域中光标附近编辑文本的方式把文本发送给应用程序。在这两种情况中,你要使用一个InputConnection对象来发送文本。调用InputMethodService.getCurrentInputConnection()方法来获得这个实例。
在光标附近编辑文本
当处理文本域中既存的的文本时,在BaseInputConnection类中有一些非常有用的方法:
getTextBeforeCursor()
返回一个CharSequence类型的字符串,它包含了光标当前位置之前所有的要求的字符。
getTextAfterCursor()
返回一个CharSequence类型的字符串,它包含了光标当前位置之后所有的要求的字符。
deleteSurroundingText()
删除当前光标位置所选择的指定数量的字符。
commitText()
把一个CharSequence类型的字符串提交给文本域,并设置新的光标位置。
例如,以下代码演示了如何把文本Fell替换成Hello!:
InputConnection ic = getCurrentInputConnection();
ic.deleteSurroundingText(4, 0);
ic.commitText("Hello", 1);
ic.commitText("!", 1);
在提交之前编排文本
如果你的IME进行文本预选或需要多个步骤才能完成文字的编排,那么你可以在文本域中显示进度,直到用户提交文字,就可以用完整的文本来代替输入部分的文本。当你把文本传递一个InputConnection类的setComposingText()方法时,你可以通过添加一个“范围”来对文本进行特殊的处理。
以下代码显示了文本域中字符的显示过程:
InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
...
ic.setComposingText("Composin", 1);
...
ic.commitText("Composing ", 1);
以下截图显示了文本是如何向用户显示的:
图3.提交之前的文本编排。