Most visited

Recently visited

Added in API level 3

InputConnection

public interface InputConnection

android.view.inputmethod.InputConnection
Known Indirect Subclasses


InputConnection接口是从InputMethod回到正在接收其输入的应用程序的通信信道。 它用于执行诸如读取光标周围的文本,将文本提交到文本框以及将原始键事件发送到应用程序等。

从API级别 N ,系统可以处理应用程序直接实现此类的情况,但以下一种或多种方法未实现。

Implementing an IME or an editor

文本输入是两个重要组件的协同作用的结果:输入法引擎(IME)和编辑器。 IME可以是软件键盘,手写界面,表情符号调色板,语音到文本引擎等。 通常在任何给定的Android设备上都安装了几个IME。 在Android中,IME可以扩展InputMethodService 有关如何创建IME的更多信息,请参阅Creating an input method指南。 编辑器是接收文本并显示它的组件。 通常,这是一个EditText实例,但由于各种原因,某些应用程序可能会选择实现自己的编辑器。 这是一个大而复杂的任务,而这样做的应用程序需要确保行为与Android中的标准EditText行为一致。 编辑器需要与IME交互,通过此InputConnection接口接收命令,并通过InputMethodManager发送命令。 编辑应该首先执行onCreateInputConnection(EditorInfo)来返回自己的输入连接。

如果您正在实现自己的IME,则需要调用此界面中的方法与应用程序进行交互。 一定要测试您的IME与广泛的应用程序,包括浏览器和丰富的文本编辑器,因为有些可能有你需要处理的特点。 请记住,您的IME可能不是文本变化的唯一来源,并且尽可能在发送的数据中保持尽可能保守,并且尽可能在收到的数据中尽可能自由。

如果您正在实现自己的编辑器,则可能需要提供自己的子类BaseInputConnection以回答来自IME的命令。 请务必使用尽可能多的IME测试编辑器,因为它们的行为可能会有很大差异。 另外,请务必使用各种语言进行测试,包括CJK语言和阿拉伯语等从右至左的语言,因为这些语言可能会有不同的输入要求。 如果您对某个特定调用应该采用的行为有疑问,请在最新的Android版本中模仿默认的TextView实现,如果您决定偏离它,请仔细考虑文本编辑器行为中的不一致几乎普遍感觉为用户不好的事情。

Cursors, selections and compositions

在Android中,光标和选择是同一件事。 “光标”只是零大小选择的特殊情况。 因此,本文档可以互换使用。 任何“在光标之前”行事的方法将在选择开始之前执行,如果有的话,任何“在光标之后”执行的方法将在选择结束后执行。

编辑者需要能够跟踪当前的“合成”区域,就像标准版小工具一样。 作品以特定风格标记:请参阅SPAN_COMPOSING 输入法用它来帮助用户跟踪哪些文本的一部分,他们目前专注,并使用编辑器进行交互setComposingText(CharSequence, int)setComposingRegion(int, int)finishComposingText() 组成区域和选择是完全独立的,IME可以使用它们,但他们认为合适。

Summary

Constants

int CURSOR_UPDATE_IMMEDIATE

无论光标/锚点位置发生变化,编辑都应尽快致电 updateCursorAnchorInfo(android.view.View, CursorAnchorInfo)

int CURSOR_UPDATE_MONITOR

无论何时更改光标/锚点位置,都要求编辑器调用 updateCursorAnchorInfo(android.view.View, CursorAnchorInfo)

int GET_EXTRACTED_TEXT_MONITOR

getExtractedText(ExtractedTextRequest, int)一起使用的标志表示您希望在提取的文本更改时收到更新。

int GET_TEXT_WITH_STYLES

getTextAfterCursor(int, int)getTextBeforeCursor(int, int)一起使用的标志具有与文本一起返回的样式信息。

Public methods

abstract boolean beginBatchEdit()

告诉编辑你正在开始一批编辑操作。

abstract boolean clearMetaKeyStates(int states)

清除给定输入连接中给定的元键按下的状态。

abstract void closeConnection()

由系统调用一次,以通知系统即将使输入方法和应用程序之间的连接失效。

abstract boolean commitCompletion(CompletionInfo text)

提交用户从之前报告给 InputMethodSession#displayCompletions(CompletionInfo[])InputMethodManager#displayCompletions(View, CompletionInfo[])的可能选择中完成。

abstract boolean commitCorrection(CorrectionInfo correctionInfo)

提交对原始用户输入自动执行的更正。

abstract boolean commitText(CharSequence text, int newCursorPosition)

将文本提交到文本框并设置新的光标位置。

abstract boolean deleteSurroundingText(int beforeLength, int afterLength)

当前光标位置之前删除文本的 beforeLength字符,以及当前光标位置之后删除文本的 afterLength字符,包括选择。

abstract boolean deleteSurroundingTextInCodePoints(int beforeLength, int afterLength)

deleteSurroundingText(int, int)的变体。

abstract boolean endBatchEdit()

告诉编辑你已经完成了以前由 beginBatchEdit()启动的批量编辑。

abstract boolean finishComposingText()

让文本编辑器完成任何构成文本当前处于活动状态。

abstract int getCursorCapsMode(int reqModes)

检索文本中当前光标位置的当前大写模式。

abstract ExtractedText getExtractedText(ExtractedTextRequest request, int flags)

在输入连接的编辑器中检索当前文本,并监视它的任何更改。

abstract Handler getHandler()

InputMethodManager调用,以使应用程序开发人员能够指定一个专用的 Handler ,其中将从输入方法调用传入的IPC方法调用。

abstract CharSequence getSelectedText(int flags)

获取选定的文本(如果有的话)。

abstract CharSequence getTextAfterCursor(int n, int flags)

在当前光标位置后获取 n个字符的文本。

abstract CharSequence getTextBeforeCursor(int n, int flags)

在当前光标位置之前获取 n个字符的文本。

abstract boolean performContextMenuAction(int id)

在该字段上执行上下文菜单操作。

abstract boolean performEditorAction(int editorAction)

让编辑执行它所说的行动。

abstract boolean performPrivateCommand(String action, Bundle data)

API将私有命令从输入法发送到其连接的编辑器。

abstract boolean reportFullscreenMode(boolean enabled)

由IME调用,以告知客户端在全屏模式和普通模式之间切换时的情况。

abstract boolean requestCursorUpdates(int cursorUpdateMode)

由输入方法调用,要求编辑回调 updateCursorAnchorInfo(android.view.View, CursorAnchorInfo)以通知游标/锚点位置。

abstract boolean sendKeyEvent(KeyEvent event)

通过此输入连接将关键事件发送到当前连接的进程。

abstract boolean setComposingRegion(int start, int end)

将文字的某个区域标记为撰写文字。

abstract boolean setComposingText(CharSequence text, int newCursorPosition)

用给定的文本替换当前构成的文本,并设置新的光标位置。

abstract boolean setSelection(int start, int end)

设置文本编辑器的选择。

Constants

CURSOR_UPDATE_IMMEDIATE

Added in API level 21
int CURSOR_UPDATE_IMMEDIATE

无论游标/锚点位置如何变化,编辑都应尽快致电updateCursorAnchorInfo(android.view.View, CursorAnchorInfo) 该标志可以与CURSOR_UPDATE_MONITOR一起使用。

常数值:1(0x00000001)

CURSOR_UPDATE_MONITOR

Added in API level 21
int CURSOR_UPDATE_MONITOR

无论何时更改光标/锚点位置,都要求编辑器调用updateCursorAnchorInfo(android.view.View, CursorAnchorInfo) 要禁用监视,请关闭此标志再次调用requestCursorUpdates(int)

该标志可以与 CURSOR_UPDATE_IMMEDIATE一起使用。

常量值:2(0x00000002)

GET_EXTRACTED_TEXT_MONITOR

Added in API level 3
int GET_EXTRACTED_TEXT_MONITOR

标记与 getExtractedText(ExtractedTextRequest, int)一起使用,表示您希望在提取的文本更改时收到更新。

常数值:1(0x00000001)

GET_TEXT_WITH_STYLES

Added in API level 3
int GET_TEXT_WITH_STYLES

getTextAfterCursor(int, int)getTextBeforeCursor(int, int)一起使用的标志具有与文本一起返回的样式信息。 如果未设置,则getTextAfterCursor(int, int)仅发送没有样式或其他跨度的原始文本。 如果设置,它可能会返回文本和样式跨度的复杂CharSequence。 编辑作者 :如果可能的话,你应该努力发送带有样式的文本,但这不是必需的。

常数值:1(0x00000001)

Public methods

beginBatchEdit

Added in API level 3
boolean beginBatchEdit ()

告诉编辑你正在开始一批编辑操作。 编辑器将尽量避免向您发送有关其状态的更新,直到endBatchEdit() 批量编辑嵌套。

IME作者:使用这个来避免调用对应于中间状态的onUpdateSelection(int, int, int, int, int, int) 此外,使用这个来避免可能因显示中间状态而产生的闪烁。 每次调用此endBatchEdit()一定要拨打endBatchEdit() ,否则您可能会阻止编辑器中的更新。

编辑作者:在批量编辑过程中,注意不要将更新发送到输入法,也不要更新显示。 IME使用这个强化来达到这个效果。 另请注意,批量编辑需要正确嵌套。

Returns
boolean true if a batch edit is now in progress, false otherwise. Since this method starts a batch edit, that means it will always return true unless the input connection is no longer valid.

clearMetaKeyStates

Added in API level 3
boolean clearMetaKeyStates (int states)

清除给定输入连接中给定的元键按下的状态。

如果编辑器跟踪这些信息,则IME可以使用此功能清除由锁定元键设置的硬键盘的元键状态。

Parameters
states int: The states to be cleared, may be one or more bits as per KeyEvent.getMetaState().
Returns
boolean true on success, false if the input connection is no longer valid.

closeConnection

Added in API level 24
void closeConnection ()

由系统调用一次,以通知系统即将使输入方法和应用程序之间的连接失效。

编辑器作者 :您现在可以清除所有嵌套的批量编辑,并且不再需要处理此连接上的后续回调,包括beginBatchEdit() }。 请注意,虽然系统尽可能调用此方法,但在某些特殊情况下可能不会调用此方法。

注意:从输入法调用时,这没有任何作用。

commitCompletion

Added in API level 3
boolean commitCompletion (CompletionInfo text)

提交用户从之前报告给InputMethodSession#displayCompletions(CompletionInfo[])InputMethodManager#displayCompletions(View, CompletionInfo[])的可能选择中完成。 这将导致与用户从实际UI中选择完成相同的行为。 在所有其他方面,这表现得像commitText(CharSequence, int)

输入法作者:请注意发送您通过 onDisplayCompletions(CompletionInfo[])收到的相同对象。

编辑作者:如果你从来不打电话给 displayCompletions(CompletionInfo[])displayCompletions(View, CompletionInfo[])那么一个行为良好的IME不应该在你的输入连接上调用它,而是准备好处理不正常的IME而不会崩溃。

调用此方法(使用有效的CompletionInfo对象)将导致编辑器在批输入结束后在当前IME上调用onUpdateSelection(int, int, int, int, int, int) 编辑器作者 ,为了发生这种情况,您需要通过调用updateSelection(View, int, int, int, int)来更改输入法的updateSelection(View, int, int, int, int) ,但要小心等待批处理编辑结束updateSelection(View, int, int, int, int)进行处理。

Parameters
text CompletionInfo: The committed completion.
Returns
boolean true on success, false if the input connection is no longer valid.

commitCorrection

Added in API level 11
boolean commitCorrection (CorrectionInfo correctionInfo)

提交对原始用户输入自动执行的更正。 一个典型的例子是使用字典纠正拼写错误。

调用此方法将导致编辑器在批输入结束后在当前IME上调用onUpdateSelection(int, int, int, int, int, int) 编辑器作者 ,为了发生这种情况,您需要通过调用updateSelection(View, int, int, int, int)来更改输入法的updateSelection(View, int, int, int, int) ,但要小心等待批处理编辑结束updateSelection(View, int, int, int, int)进行处理。

Parameters
correctionInfo CorrectionInfo: Detailed information about the correction.
Returns
boolean true on success, false if the input connection is no longer valid. In N and later, returns false when the target application does not implement this method.

commitText

Added in API level 3
boolean commitText (CharSequence text, 
                int newCursorPosition)

将文本提交到文本框并设置新的光标位置。

此方法将删除当前构成文本的内容,并将其替换为传递的CharSequence,然后根据newCursorPosition移动光标。 如果在调用此方法时没有合成文本,则会将新文本插入到光标位置,如果有,则删除选择内的文本。 这就像调用setComposingText(text, newCursorPosition)然后finishComposingText()

调用此方法将导致编辑器在批输入结束后在当前IME上调用onUpdateSelection(int, int, int, int, int, int) 编辑器作者 ,为了发生这种情况,您需要通过调用updateSelection(View, int, int, int, int)来更改输入法的updateSelection(View, int, int, int, int) ,但要小心等待批处理编辑结束updateSelection(View, int, int, int, int)进行处理。

Parameters
text CharSequence: The text to commit. This may include styles.
newCursorPosition int: The new cursor position around the text, in Java characters. If > 0, this is relative to the end of the text - 1; if <= 0, this is relative to the start of the text. So a value of 1 will always advance the cursor to the position after the full text being inserted. Note that this means you can't position the cursor within the text, because the editor can make modifications to the text you are providing so it is not possible to correctly specify locations there.
Returns
boolean true on success, false if the input connection is no longer valid.

deleteSurroundingText

Added in API level 3
boolean deleteSurroundingText (int beforeLength, 
                int afterLength)

当前光标位置之前删除文本的beforeLength字符,以及当前光标位置之后删除文本的afterLength字符,包括选择。 在引用字符串中字符的顺序之前和之后,并不涉及它们的可视化表示:这意味着您不必确定文本的方向,只需按原样使用索引即可。

长度以Java字符提供,而不是以代码点或字形提供。

由于此方法仅对选择前后的文本进行操作,因此不会影响选择内容。 如果跨度包含要删除的字符,则这可能会影响组合跨度,但否则不会更改它。 如果组合范围中的某些字符被删除,则组合范围将持续存在,但由于其中的很多字符已被删除,组合范围会缩短。

输入法作者:请小心不要删除一半代理对。 还要注意不要删除编辑器中的字符,因为这可能会对应用程序造成不良影响。 调用此方法将导致编辑器在批量输入结束后在您的服务上调用onUpdateSelection(int, int, int, int, int, int)

编辑作者:请注意实施此调用时的竞争条件。 IME可以对文本进行更改或更改选择位置并立即使用此方法; 您需要确保效果与最新编辑的结果一致。 另外,尽管IME不应发送比字符串内容长的大小,但应检查溢出值并将索引修剪为内容大小以避免崩溃。 由于这会更改编辑器的内容,因此您需要通过调用updateSelection(View, int, int, int, int)来更改输入法的updateSelection(View, int, int, int, int) ,但要小心等待,直到批量编辑完成(如果正在进行中)。

Parameters
beforeLength int: The number of characters before the cursor to be deleted, in code unit. If this is greater than the number of existing characters between the beginning of the text and the cursor, then this method does not fail but deletes all the characters in that range.
afterLength int: The number of characters after the cursor to be deleted, in code unit. If this is greater than the number of existing characters between the cursor and the end of the text, then this method does not fail but deletes all the characters in that range.
Returns
boolean true on success, false if the input connection is no longer valid.

deleteSurroundingTextInCodePoints

Added in API level 24
boolean deleteSurroundingTextInCodePoints (int beforeLength, 
                int afterLength)

deleteSurroundingText(int, int)的变体。 主要区别是:

  • The lengths are supplied in code points, not in Java chars or in glyphs.
  • This method does nothing if there are one or more invalid surrogate pairs in the requested range.

编辑作者:除了 deleteSurroundingText(int, int)的要求 deleteSurroundingText(int, int) ,当在请求的范围内发现一对或多对无效的代理对时,请不要做任何事情。

Parameters
beforeLength int: The number of characters before the cursor to be deleted, in code points. If this is greater than the number of existing characters between the beginning of the text and the cursor, then this method does not fail but deletes all the characters in that range.
afterLength int: The number of characters after the cursor to be deleted, in code points. If this is greater than the number of existing characters between the cursor and the end of the text, then this method does not fail but deletes all the characters in that range.
Returns
boolean true on success, false if the input connection is no longer valid. Returns false when the target application does not implement this method.

也可以看看:

endBatchEdit

Added in API level 3
boolean endBatchEdit ()

告诉编辑你已经完成了一个先前由beginBatchEdit()启动的批量编辑。 这仅结束最新的批次。

输入法作者:确保每次致电 beginBatchEdit()拨打 beginBatchEdit()

编辑作者:请注意批量编辑嵌套。 更新仍然会被保留,直到最后批量编辑结束。

Returns
boolean true if there is still a batch edit in progress after closing the latest one (in other words, if the nesting count is > 0), false otherwise or if the input connection is no longer valid.

finishComposingText

Added in API level 3
boolean finishComposingText ()

让文本编辑器完成任何构成文本当前处于活动状态。 这只是将文本保留原样,删除任何特殊的构成样式或其他状态。 光标位置保持不变。

IME作者:请注意,有些编辑可能会花费这个电话费用。

编辑作者:请注意,当调用这个指针时,光标可能在内容中的任何位置,包括在组合跨度的中间或完全不相关的地方。 它不能移动。

Returns
boolean true on success, false if the input connection is no longer valid.

getCursorCapsMode

Added in API level 3
int getCursorCapsMode (int reqModes)

检索文本中当前光标位置的当前大写模式。 有关更多信息,请参阅TextUtils.getCapsMode

如果输入连接变得无效(例如进程崩溃)或客户端花费很长时间来响应文本(返回给定几秒钟),则此方法可能会失败。 无论哪种情况,都会返回0。

此方法不会以任何方式影响编辑器中的文本,也不会影响选择或编写跨度。

编辑作者:请注意实施此调用时的竞争条件。 IME可以更改光标位置并立即使用此方法; 您需要确保返回的值与最新编辑和光标位置更改的结果一致。

Parameters
reqModes int: The desired modes to retrieve, as defined by TextUtils.getCapsMode. These constants are defined so that you can simply pass the current TextBoxAttribute.contentType value directly in to here.
Returns
int the caps mode flags that are in effect at the current cursor position. See TYPE_TEXT_FLAG_CAPS_* in InputType.

getExtractedText

Added in API level 3
ExtractedText getExtractedText (ExtractedTextRequest request, 
                int flags)

在输入连接的编辑器中检索当前文本,并监视它的任何更改。 此函数返回当前文本,并且可选地,输入连接可以在文本更改时向输入方法发送更新。

如果输入连接变得无效(例如进程崩溃)或客户端花费很长时间来响应文本(返回给定几秒钟),则此方法可能会失败。 无论哪种情况,都返回null。

编辑作者:作为一般规则,尽量遵守request中关于多少个字符要返回的字段,但如果性能或方便不符合要求,请随意为您的情况做最适合的处理。 此外,如果GET_EXTRACTED_TEXT_MONITOR标志设置,你应该叫updateExtractedText(View, int, ExtractedText) ,只要你拨打updateSelection(View, int, int, int, int)

Parameters
request ExtractedTextRequest: Description of how the text should be returned. ExtractedTextRequest
flags int: Additional options to control the client, either 0 or GET_EXTRACTED_TEXT_MONITOR.
Returns
ExtractedText an ExtractedText object describing the state of the text view and containing the extracted text itself, or null if the input connection is no longer valid of the editor can't comply with the request for some reason.

getHandler

Added in API level 24
Handler getHandler ()

InputMethodManager调用,以使应用程序开发人员能够指定一个专用的 Handler ,其中来自输入方法的传入IPC方法调用将被分派。

注意:从输入法调用时,这没有任何作用。

Returns
Handler null to use the default Handler.

getSelectedText

Added in API level 9
CharSequence getSelectedText (int flags)

获取选定的文本(如果有的话)。

如果输入连接变得无效(例如进程崩溃)或客户端花费太长时间回复文本(返回时间为几秒),则此方法可能失败。 无论哪种情况,都返回null。

此方法不得导致编辑器状态发生任何更改。

如果 GET_TEXT_WITH_STYLES作为标志提供,编辑器应该返回一个 SpannableString ,并在文本上设置所有跨度。

IME作者:请认为这将触发IPC往返需要一段时间。 假设这种方法消耗大量时间。

编辑作者:请注意实施此调用时的竞争条件。 IME可以对文本进行更改或更改选择位置并立即使用此方法; 您需要确保返回的值与最新编辑的结果一致。

Parameters
flags int: Supplies additional options controlling how the text is returned. May be either 0 or GET_TEXT_WITH_STYLES.
Returns
CharSequence the text that is currently selected, if any, or null if no text is selected. In N and later, returns false when the target application does not implement this method.

getTextAfterCursor

Added in API level 3
CharSequence getTextAfterCursor (int n, 
                int flags)

在当前光标位置后获取 n个字符的文本。

如果输入连接变得无效(例如进程崩溃)或客户端花费很长时间来响应文本(返回给定几秒钟),则此方法可能会失败。 无论哪种情况,都返回null。

此方法不会以任何方式影响编辑器中的文本,也不会影响选择或编写跨度。

如果 GET_TEXT_WITH_STYLES作为标志提供,编辑器应该返回一个 SpannableString ,并在文本上设置所有跨度。

IME作者:请认为这将触发IPC往返需要一段时间。 假设这种方法消耗大量时间。

编辑作者:请注意实施此调用时的竞争条件。 IME可以对文本进行更改并立即使用此方法; 您需要确保返回的值与最新编辑的结果一致。 此外,如果性能决定如此,您可能会返回少于n个字符,但要记住,IME依赖于许多函数:例如,您不应该将返回值限制为当前行,并且特别不要返回0个字符除非光标真的在文本的末尾。

Parameters
n int: The expected length of the text.
flags int: Supplies additional options controlling how the text is returned. May be either 0 or GET_TEXT_WITH_STYLES.
Returns
CharSequence the text after the cursor position; the length of the returned text might be less than n.

getTextBeforeCursor

Added in API level 3
CharSequence getTextBeforeCursor (int n, 
                int flags)

在当前光标位置之前获取 n个字符的文本。

如果输入连接变得无效(例如进程崩溃)或者编辑器花费很长时间来响应文本(它会返回几秒钟),则此方法可能会失败。 无论哪种情况,都返回null。 此方法不会以任何方式影响编辑器中的文本,也不会影响选择或编写跨度。

如果 GET_TEXT_WITH_STYLES作为标志提供,那么编辑器应该返回一个 SpannableString ,并在文本上设置所有跨度。

IME作者:请认为这将触发IPC往返需要一段时间。 假设这种方法消耗大量时间。 另外请注意,编辑可能会选择返回的字符数少于所请求的字符数,即使它们出于性能原因而可用。

编辑作者:请注意实施此调用时的竞争条件。 IME可以对文本进行更改并立即使用此方法; 您需要确保返回的值与最新编辑的结果一致。 此外,如果性能决定如此,您可能会返回少于n个字符,但要记住,IME依赖于许多函数:例如,您不应该将返回值限制为当前行,并且特别不要返回0个字符除非光标真的在文本的开头。

Parameters
n int: The expected length of the text.
flags int: Supplies additional options controlling how the text is returned. May be either 0 or GET_TEXT_WITH_STYLES.
Returns
CharSequence the text before the cursor position; the length of the returned text might be less than n.

performContextMenuAction

Added in API level 3
boolean performContextMenuAction (int id)

在该字段上执行上下文菜单操作。 给定id可以是以下之一: selectAllstartSelectingTextstopSelectingTextcutcopypastecopyUrl ,或switchInputMethod

Parameters
id int
Returns
boolean

performEditorAction

Added in API level 3
boolean performEditorAction (int editorAction)

让编辑执行它所说的行动。

当用户按下与该操作关联的键时,这通常由IME使用。

Parameters
editorAction int: This must be one of the action constants for EditorInfo.editorType, such as EditorInfo.EDITOR_ACTION_GO.
Returns
boolean true on success, false if the input connection is no longer valid.

performPrivateCommand

Added in API level 3
boolean performPrivateCommand (String action, 
                Bundle data)

API将私有命令从输入法发送到其连接的编辑器。 这可以用于提供特定于域的功能,这些功能仅在某些输入方法与其客户端之间已知。 请注意,由于InputConnection协议是异步的,因此您无法获取结果或知道客户端是否理解该命令; 您可以使用EditorInfo的信息来确定客户端是否支持特定的命令。

Parameters
action String: Name of the command to be performed. This must be a scoped name, i.e. prefixed with a package name you own, so that different developers will not create conflicting commands.
data Bundle: Any data to include with the command.
Returns
boolean true if the command was sent (whether or not the associated editor understood it), false if the input connection is no longer valid.

reportFullscreenMode

Added in API level 3
boolean reportFullscreenMode (boolean enabled)

由IME调用,以告知客户端在全屏模式和普通模式之间切换时的情况。 通常这将通过标准实现InputMethodService

Parameters
enabled boolean
Returns
boolean true on success, false if the input connection is no longer valid.

requestCursorUpdates

Added in API level 21
boolean requestCursorUpdates (int cursorUpdateMode)

通过输入方法调用要求编辑回调 updateCursorAnchorInfo(android.view.View, CursorAnchorInfo)以通知游标/锚点位置。

Parameters
cursorUpdateMode int: CURSOR_UPDATE_IMMEDIATE and/or CURSOR_UPDATE_MONITOR. Pass 0 to disable the effect of CURSOR_UPDATE_MONITOR.
Returns
boolean true if the request is scheduled. false to indicate that when the application will not call updateCursorAnchorInfo(android.view.View, CursorAnchorInfo). In N and later, returns false also when the target application does not implement this method.

sendKeyEvent

Added in API level 3
boolean sendKeyEvent (KeyEvent event)

通过此输入连接将关键事件发送到当前连接的进程。 该事件将像正常的关键事件一样发送到当前集中的视图; 这通常是提供此InputConnection的视图,但由于此协议的异步性质无法得到保证,并且焦点在接收事件时可能已发生变化。

此方法可用于将关键事件发送到应用程序。 例如,屏幕上的键盘可能会使用此方法来模拟硬件键盘。 有三种类型的标准键盘,数字(12键),预测(20键)和ALPHA(QWERTY)。 您可以通过指定键盘事件的设备ID来指定键盘类型。

您通常需要为您提供给此API的所有关键事件对象设置标志KeyEvent.FLAG_SOFT_KEYBOARD ; 该标志不会为你设置。

请注意,在正常操作中发送此类重要事件是不鼓励的; 这主要用于TYPE_NULL类型的文本字段。 commitText(CharSequence, int)使用commitText(CharSequence, int)系列方法向应用程序发送文本。

Parameters
event KeyEvent: The key event.
Returns
boolean true on success, false if the input connection is no longer valid.

也可以看看:

setComposingRegion

Added in API level 9
boolean setComposingRegion (int start, 
                int end)

将文字的某个区域标记为撰写文字。 如果有一个组合区域,则字符保持原样并且删除组合范围,就好像finishComposingText() 使用编写文本的默认样式。

通过的索引被剪裁到内容边界。 如果结果区域为零,则不标记区域,其效果与调用finishComposingText()的效果相同。 开始和结束的顺序并不重要。 实际上,从开始到结束的区域和从结束到开始的区域是相同的。 编辑作者,准备好接受比结束更大的开始。

由于这不会改变文本的内容,编辑不应该调用 updateSelection(View, int, int, int, int)并且IME不应该收到 onUpdateSelection(int, int, int, int, int, int)

这对光标/选择位置没有影响。 这可能导致光标位于组合区域内部或外部的任何位置,包括选择和组合区域部分或全部重叠的情况。

Parameters
start int: the position in the text at which the composing region begins
end int: the position in the text at which the composing region ends
Returns
boolean true on success, false if the input connection is no longer valid. In N and later, false is returned when the target application does not implement this method.

setComposingText

Added in API level 3
boolean setComposingText (CharSequence text, 
                int newCursorPosition)

用给定的文本替换当前构成的文本,并设置新的光标位置。 以前任何撰写文本集都会自动删除。

如果有任何组合范围当前处于活动状态,则它所包含的所有字符将被删除。 传递的文本被添加到它的位置,并且组合范围被添加到该文本。 如果没有组合范围激活,则将传递的文本添加到光标位置(如果有,则首先删除选定的字符),并在新文本上添加组合范围。 最后,光标移动到newCursorPosition指定的位置。

这通常由IME在添加或删除或更改组合范围中的字符时调用。 调用此方法将导致编辑器在批量输入结束后在当前IME上调用onUpdateSelection(int, int, int, int, int, int)

编辑作者:请记住,文本可能与通话时的作品跨度非常相似或完全不同,或者可能根本没有作品跨度。 请注意,虽然这不是典型用途,但字符串可能为空。 通常情况下,用空字符串替换当前组成的文本。 另外,请注意光标位置。 IME完全依赖上述的工作。 由于这会更改编辑器的内容,因此您需要通过调用updateSelection(View, int, int, int, int)来更改输入法的updateSelection(View, int, int, int, int) ,但要小心等待,直到批量编辑完成(如果正在进行中)。 请注意,此方法可以将光标位置设置在合成文本的任一边上,也可以完全位于合成文本的外边,但IME可能会继续将光标位置移动到随后调用中的合成文本中,因此您应该完全不做任何假设:作文文本和选择是完全独立的。

Parameters
text CharSequence: The composing text with styles if necessary. If no style object attached to the text, the default style for composing text is used. See Spanned for how to attach style object to the text. SpannableString and SpannableStringBuilder are two implementations of the interface Spanned.
newCursorPosition int: The new cursor position around the text. If > 0, this is relative to the end of the text - 1; if <= 0, this is relative to the start of the text. So a value of 1 will always advance you to the position after the full text being inserted. Note that this means you can't position the cursor within the text, because the editor can make modifications to the text you are providing so it is not possible to correctly specify locations there.
Returns
boolean true on success, false if the input connection is no longer valid.

setSelection

Added in API level 3
boolean setSelection (int start, 
                int end)

设置文本编辑器的选择。 要设置光标位置,开始和结束应该具有相同的值。

由于这将移动光标,调用此方法将导致编辑器在批量输入结束后在当前IME上调用onUpdateSelection(int, int, int, int, int, int) 编辑者作者 ,为了发生这种情况,您需要通过调用updateSelection(View, int, int, int, int)来对输入方法进行updateSelection(View, int, int, int, int) ,但要小心等待批处理编辑完成(如果正在进行中)。

This has no effect on the composing region which must stay unchanged. The order of start and end is not important. In effect, the region from start to end and the region from end to start is the same. Editor authors, be ready to accept a start that is greater than end.

Parameters
start int: the character index where the selection should start.
end int: the character index where the selection should end.
Returns
boolean true on success, false if the input connection is no longer valid.

Hooray!