Most visited

Recently visited

Added in API level 3

InputConnectionWrapper

public class InputConnectionWrapper
extends Object implements InputConnection

java.lang.Object
   ↳ android.view.inputmethod.InputConnectionWrapper


用于代理调用另一个InputConnection的包装类。 子类和乐趣!

Summary

Inherited constants

From interface android.view.inputmethod.InputConnection

Public constructors

InputConnectionWrapper(InputConnection target, boolean mutable)

初始化一个包装器。

Public methods

boolean beginBatchEdit()

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

boolean clearMetaKeyStates(int states)

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

void closeConnection()

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

boolean commitCompletion(CompletionInfo text)

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

boolean commitCorrection(CorrectionInfo correctionInfo)

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

boolean commitText(CharSequence text, int newCursorPosition)

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

boolean deleteSurroundingText(int beforeLength, int afterLength)

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

boolean deleteSurroundingTextInCodePoints(int beforeLength, int afterLength)

deleteSurroundingText(int, int)的变体。

boolean endBatchEdit()

告诉编辑你已经完成了以前用 beginBatchEdit()开始的批量编辑。

boolean finishComposingText()

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

int getCursorCapsMode(int reqModes)

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

ExtractedText getExtractedText(ExtractedTextRequest request, int flags)

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

Handler getHandler()

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

CharSequence getSelectedText(int flags)

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

CharSequence getTextAfterCursor(int n, int flags)

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

CharSequence getTextBeforeCursor(int n, int flags)

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

boolean performContextMenuAction(int id)

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

boolean performEditorAction(int editorAction)

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

boolean performPrivateCommand(String action, Bundle data)

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

boolean reportFullscreenMode(boolean enabled)

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

boolean requestCursorUpdates(int cursorUpdateMode)

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

boolean sendKeyEvent(KeyEvent event)

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

boolean setComposingRegion(int start, int end)

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

boolean setComposingText(CharSequence text, int newCursorPosition)

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

boolean setSelection(int start, int end)

设置文本编辑器的选择。

void setTarget(InputConnection target)

更改输入连接的目标。

Inherited methods

From class java.lang.Object
From interface android.view.inputmethod.InputConnection

Public constructors

InputConnectionWrapper

Added in API level 3
InputConnectionWrapper (InputConnection target, 
                boolean mutable)

初始化一个包装器。

警告:虽然系统可以在某些地方接受 (InputConnection) null ,但您无法通过 null中的 target非空 InputConnectionWrapper来模拟此类行为。

Parameters
target InputConnection: the InputConnection to be proxied.
mutable boolean: set true to protect this object from being reconfigured to target another InputConnection. Note that this is ignored while the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

closeConnection

Added in API level 24
void closeConnection ()

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

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

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

Throws
NullPointerException if the target is null.

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)来更改输入方法,但要小心等待,直到批量编辑完成(如果正在进行中)。

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

commitCorrection

Added in API level 11
boolean commitCorrection (CorrectionInfo correctionInfo)

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

调用此方法将导致编辑器在批输入结束后在当前IME上调用onUpdateSelection(int, int, 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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

endBatchEdit

Added in API level 3
boolean endBatchEdit ()

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

IME作者:确保每次致电 beginBatchEdit()打一次电话。

Editor authors: please be careful about batch edit nesting. Updates still to be held back until the end of the last batch edit.

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.
Throws
NullPointerException if the target is null.

finishComposingText

Added in API level 3
boolean finishComposingText ()

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

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

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

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

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

getHandler

Added in API level 24
Handler getHandler ()

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

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

Returns
Handler null to use the default Handler.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

getTextBeforeCursor

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

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

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

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

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

Editor authors: please be careful of race conditions in implementing this call. An IME can make a change to the text and use this method right away; you need to make sure the returned value is consistent with the result of the latest edits. Also, you may return less than n characters if performance dictates so, but keep in mind IMEs are relying on this for many functions: you should not, for example, limit the returned value to the current line, and specifically do not return 0 characters unless the cursor is really at the start of the text.

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.
Throws
NullPointerException if the target is null.

performContextMenuAction

Added in API level 3
boolean performContextMenuAction (int id)

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

Parameters
id int
Returns
boolean
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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.
Throws
NullPointerException if the target is null.

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)来更改输入方法,但要小心等待,直到批量编辑完成(如果正在进行中)。

这对于必须保持不变的组成区域没有影响。 开始和结束的顺序并不重要。 实际上,从开始到结束的区域和从结束到开始的区域是相同的。 编辑作者,准备好接受比结束更大的开始。

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.
Throws
NullPointerException if the target is null.

setTarget

Added in API level 3
void setTarget (InputConnection target)

更改输入连接的目标。

警告:尽管系统可以在某些地方接受 (InputConnection) null ,但您无法通过 null中的 target非空 InputConnectionWrapper来模拟此类行为。

Parameters
target InputConnection: the InputConnection to be proxied.
Throws
SecurityException when this wrapper has non-null target and is immutable.

Hooray!