前言
本章内容是android.view.inputmethod.InputConnection,为输入法相关章节,版本为Android 2.3 r1,翻译来自"六必治",欢迎大家访问他的博客:http://www.cnblogs.com/zcmky/,再次感谢"六必治" !期待你加入Android API 中文的翻译,联系我[email protected]。
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com/
Android中文翻译组:http://code.taobao.org/project/view/404/
正文
一、结构
public interface InputConnection
android.view.inputmethod.InputConnection
间接子类
BaseInputConnection, InputConnectionWrapper
二、概述
InputConnection接口是接收输入的应用程序与InputMethod
间的通讯通道。它可以完成以下功能,如读取光标周围的文本,向文本框提交文本,向应用程序提交原始按键事件。
BaseInputConnection
的子类应实现这一接口。
三、常量
public static final int GET_EXTRACTED_TEXT_MONITOR
标志,用在getExtractedText(ExtractedTextRequest, int)
中,表示提取的文本变化时你想接收到更新。
常量值: 1 (0x00000001)
public static final int GET_TEXT_WITH_STYLES
标志,用在getTextAfterCursor(int, int)
和getTextBeforeCursor(int, int)
中,表明返回的文本中包含样式。不设置时,你将仅接收原始文本。设置时,你将收到复合的CharSequence,包括文本和样式段。
常量值: 1 (0x00000001)
四、公共方法
public abstract boolean beginBatchEdit ()
通知编辑器你将开始批量编辑操作。编辑器尽量避免向你发送状态更新,直到调用endBatchEdit()
为止。
public abstract boolean clearMetaKeyStates (int states)
在指定的输入连接中清除指定的元键(meta key)按下状态。
参数
states 清除的状态,可以是KeyEvent.getMetaState()中的一位或多位结果。
返回值
成功返回true,当连接无效时返回flase。
public abstract boolean commitCompletion (CompletionInfo text)
提交用户的选择,选择先前向 InputMethodSession.displayCompletions()
提交的选项中的一个。其结果就像用户从实际UI中做出一样。
参数
text 提交的结果。
返回值
成功返回true,当连接无效时返回flase。
public abstract boolean commitText (CharSequence text, int newCursorPosition)
向文本框提交文本并设置新的光标位置。之前设置的正编辑文字将自动删除。
参数
text 提交的文本。
newCursorPosition 文本范围内新的光标位置。如果大于0,从提交文本末尾-1处计起;<= 0,提交文本开始处计起。所以值为1时,光标将定位于你刚刚插入文本之后。注意你不能光标定位于提交文本中,因为编辑器可以修改你提供的文本,所以不必将光标定位在哪。
返回值
成功返回true,当连接无效时返回flase。
public abstract boolean deleteSurroundingText (int leftLength, int rightLength)
删除当前光标前的leftLength个字符,并删除当前光标后的rightLength个字符,不包联想输入(composing)的文字。
参数
leftLength 删除的当前光标之前字符个数。
rightLength 删除的当前光标之后字符个数。
返回值
成功返回true,当连接无效时返回flase。
public abstract boolean endBatchEdit ()
调用
endBatchEdit()
方法
通知编辑器之前开始的批量编辑已完成。
public abstract boolean finishComposingText ()
强制结束文本编辑器,无论联想输入(composing text)是否激活。文本保持不变,移除任何与此文本的编辑样式或其他状态。光标保持不变。
public abstract int getCursorCapsMode (int reqModes)
取得当前光标位置的文本的大小写状态。参见TextUtils.getCapsMode
取得更多信息。此方法在输入连接(connection)无效(如线程冲突)或客户端等待时间过长(等待几秒返回)时可能会失败。上述情况时返回0。
参数
reqModes 依据TextUtils.getCapsMode
的
定义取得期望的状态。通过已定义的常数,你可以轻易地传递TextBoxAttribute.contentType
到
当前。
返回值
返回当前有效的大小写状态。
public abstract ExtractedText getExtractedText (ExtractedTextRequest request, int flags)
获取当前输入连接的编辑器中的当前文本,并监视是否有变化。函数返回当前文本,当文本变化时输入连接可选择性向输入法发送更新。
此方法在输入联接无效时(如线程冲突)或客户端等待时间过长(等待几秒返回)时可能会失败。上述情况时返回null值。
参数
request 描述文本如何返回
flags 控制客户端的附加选项,0或GET_EXTRACTED_TEXT_MONITOR
返回值
返回一个ExtractedText对象描述文本视窗的状态,及所包含的提取文本。
public abstract CharSequence getSelectedText (int flags)
如果有的话取得所选的文本。
此方法在输入连接无效时(如线程冲突)或客户端等待时间过长(等待几秒返回)时可能会失败。上述情况时返回null值。
参数
flags 提供附加选项控制,控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES
返回值
如果有的话返回当前选取文本,如果没有文本被选中返回null。
public abstract CharSequence getTextAfterCursor (int n, int flags)
取得当前光标位置后的 n 个字符文本。
此方法在输入连接无效时(如线程冲突)或客户端等待时间过长(等待几秒返回)时可能会失败。上述情况时返回null值。
参数
n 期望的文本长度
flags 提供附加选项控制,控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES
返回值
返回当前光标后的文本,返回的文本长度可能小于 n
public abstract CharSequence getTextBeforeCursor (int n, int flags)
取得当前光标位置前的 n 个字符文本。
本此方法在输入连接无效(如线程冲突)或客户端等待时间过长(等待几秒返回)时可能会失败。上述情况时返回null值。
参数
n 期望的文本长度
flags 提供附加选项控制,控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES
返回值
返回当前光标前的文本,返回的文本长度可能小于 n
public abstract boolean performContextMenuAction (int id)
在区域中执行调用上下文菜单动作,其id可能下列之一:selectAll
, startSelectingText
, stopSelectingText
, cut
, copy
, paste
, copyUrl
, 或 switchInputMethod
。
public abstract boolean performEditorAction (int editorAction)
让编辑器执行一个它可以完成的操作。
参数
editorAction 必须是动作常量EditorInfo.editorType中的一个,如EditorInfo.EDITOR_ACTION_GO。
返回值
成功返回true,如输入连接无效返回false。
public abstract boolean performPrivateCommand (String action, Bundle data)
API从输入法向所连接的编辑器发送私有命令。这可用于提供仅用于特定输入法及其客户端功能的特定域(domain-specific)。注意,因为InputConnection协议是异步的,你无法取回结果或知道客户端是否懂得命令;你可能使用 EditorInfo来确定客户端是否支持某一命令。
参数
action 要执行的命令名称。必须是作用域名,前缀你自己的包名,这样不同的开发者就不会建立让人冲突的命令。
data 命令中的数据
返回值
当命令发送后返回true(无论相关的编辑是否理解它),如输入连接无效返回false。
public abstract boolean reportFullscreenMode (boolean enabled)
由IME调用,通知客户端将在全屏与普通模式间切换。它在 InputMethodService的标准实现中被调用。
public abstract boolean sendKeyEvent (KeyEvent event)
向当前输入连接所附着的进程发送按键事件。事件像普通按键事件一样由当前焦点,通常是提供InputConnection的视图。但由于协议的异步性这一点并不总是这样,焦点可能在事件收到时发生改变。
本方法可用于向应用程序发送按键事件。如屏幕键盘可以用这一方法模拟硬件键盘。标准键盘有三种:数字(12键),预测键盘(20键)和字母(QWERTY)。你可以通过事件的设备码(device id)确定键盘类型。
在你向本API发送的所有按键事件中,你可能希望设置KeyEvent.FLAG_SOFT_KEYBOARD
标志,但这一标志不可设置。
参数
event 按键事件
返回值
成功返回true,当输入连接无效返回false。
参见
KeyEvent
NUMERIC
PREDICTIVE
ALPHA
public abstract boolean setComposingRegion (int start, int end)
将特定区域设为正在编辑文本。以前设置的正在编辑文本自动移除。文本使用默认正在编辑文本样式。(审核注:”composing text”的翻译还需要后期用例子来推测其含义。)
参数
start 正在编辑文本开始的位置
end 正在编辑文本结束的位置。
返回值
成功返回true,当输入联接无效时返回false。
public abstract boolean setComposingText (CharSequence text, int newCursorPosition)
将当前的光标旁正在联想文本(composing text)替代为给定文本,并设置新光标位置。以前设置的正在编辑文本自动移除。(译者注:
InputConnection ic = getCurrentInputConnection();
ic.setComposingText("Composi", 1);
)
参数
text 如必要正在编辑文本有样式。如文本没有附带样式对象,正在编辑文本将应用默认样式。见如何在文本上附加样式{#link android.text.Spanned}。{#link android.text.SpannableString}和{#link android.text.SpannableStringBuilder}是两种界面实现方式。
newCursorPosition 文本范围内新的光标位置。如果大于0,从提交文本末尾-1处计起;<= 0,提交文本开始处计起。所以值为1时,光标将定位于你刚刚插入文本之后。注意你不能光标定位于提交文本中,因为编辑器可以修改你提供的文本,所以不必将光标定位在哪。
返回值
成功返回true,当输入联接无效时返回false。
public abstract boolean setSelection (int start, int end)
设置文本编辑器的选定文本。设置到当前光标时,开始与结束取相同值。
返回值
成功返回true,当输入联接无效时返回false。
五、补充
文章链接
android sdk中 softkeyboard的自己解析(4)
开源项目
wifikeyboard