public class InputMethodService
extends AbstractInputMethodService
java.lang.Object | |||||
↳ | android.content.Context | ||||
↳ | android.content.ContextWrapper | ||||
↳ | android.app.Service | ||||
↳ | android.inputmethodservice.AbstractInputMethodService | ||||
↳ | android.inputmethodservice.InputMethodService |
InputMethodService提供了一个InputMethod的标准实现,最终的实现可以派生自定义。 请参阅基类AbstractInputMethodService
和InputMethod
接口,以获取有关编写输入方法的基础知识的更多信息。
除了正常的服务生命周期方法之外,这个类还引入了大多数子类将要使用的一些新的特定回调:
onInitializeInterface()
for user-interface initialization, in particular to deal with configuration changes while the service is running. onBindInput()
to find out about switching to a new client. onStartInput(EditorInfo, boolean)
to deal with an input session starting with the client. onCreateInputView()
, onCreateCandidatesView()
, and onCreateExtractTextView()
for non-demand generation of the UI. onStartInputView(EditorInfo, boolean)
to deal with input starting within the input area of the IME. 输入方法在其工作方式上有很大的判断力: InputMethodService
为标准UI元素(输入视图,候选视图,以全屏模式运行)提供了一个基本框架,但是由特定的实现者决定如何使用它们。 例如,一种输入方法可以用键盘实现输入区域,另一种输入方法可以允许用户绘制文本,而另一种输入方法可以没有输入区域(并且因此对用户不可见),而是监听音频并执行文本到语音转换。
在这里提供的实现中,所有这些元素都放在由InputMethodService管理的单个窗口中。 它将执行回调,因为它需要关于它们的信息,并提供API来对它们进行编程控制。 这些元素的布局明确定义:
大多数输入方法的核心是软输入视图。 这是大多数用户交互发生的地方:按下软键,绘制字符,或者其他输入法想要生成文本。 大多数实现只是拥有自己的视图来完成所有这些工作,并在onCreateInputView()
时返回它的新实例。 此时,只要输入视图可见,您将在该视图中看到用户交互,并可以在InputMethodService上回调以与应用程序进行适当交互。
在某些情况下,您要决定是否应该向用户显示软输入视图。 这是通过实现onEvaluateInputViewShown()
根据是否应在当前环境中显示返回true或false来完成的。 如果您的任何状态发生了变化,可能会影响此状态,请致电updateInputViewShown()
重新评估它。 默认实现总是显示输入视图,除非有一个可用的硬键盘,这对于大多数输入方法来说是合适的行为。
通常,当用户生成原始文本时,输入方法希望为他们提供可供选择使用的文本的可能解释列表。 这是通过候选人视图完成的,并且与您实施onCreateCandidatesView()
的软输入视图一样,可实例化您自己的实现候选人界面的视图。
候选人视图的管理与输入视图有点不同,因为候选人视图往往更加短暂,仅在用户输入当前文本的可能候选人时才显示。 要控制是否显示候选人视图,请使用setCandidatesViewShown(boolean)
。 请注意,因为候选视图往往会显示和隐藏很多,所以它不会像软输入视图一样影响应用程序UI:它永远不会导致应用程序窗口调整大小,只会导致它们在需要时进行平移用户看到当前的焦点。
有时您的输入法UI太大而无法与应用程序UI集成,因此您只想接管屏幕。 这可以通过切换到全屏模式来实现,使输入法窗口填充整个屏幕并添加自己的“提取文本”编辑器,向用户显示正在输入的文本。 与其他UI元素不同的是,抽取编辑器有一个标准实现,您不需要更改。 编辑器位于IME的顶部,位于输入和候选人视图的上方。
与输入视图类似,您可以通过实现onEvaluateFullscreenMode()
来根据在当前环境中是否应全屏显示返回true或false来控制IME是否以全屏模式运行。 如果您的任何状态发生了变化,可能会对此造成影响,请致电updateFullscreenMode()
重新评估。 当屏幕处于横向方向时,默认实现选择全屏模式,这对大多数输入方法具有相当大的输入区域是适当的行为。
在全屏模式下,您有一些特殊要求,因为用户无法看到应用程序UI。 特别是,您应该实施onDisplayCompletions(CompletionInfo[])
以显示您的应用程序生成的完成项,通常在候选人视图中显示,就像您通常会显示的候选人一样。
IME的关键部分当然是为应用程序生成文本。 这是通过调用应用程序的InputConnection
接口完成的,该接口可以从getCurrentInputConnection()
检索。 该接口允许您生成原始键事件,或者,如果目标支持它,则直接编辑候选字符串和提交文本。
通过EditorInfo
类可以找到关于期望目标和支持的EditorInfo
该类使用getCurrentInputEditorInfo()
方法检索。 其中最重要的部分是EditorInfo.inputType
; 特别是,如果这是EditorInfo.TYPE_NULL
,那么目标不支持复杂的编辑,您只需要将原始键事件传递给它。 输入法还需要查看其他值,例如检测密码模式,自动完成文本视图,输入电话号码等。
当用户在输入目标之间切换时,您将收到对onFinishInput()
和onStartInput(EditorInfo, boolean)
呼叫。 您可以使用它们重置并初始化当前目标的输入状态。 例如,您通常需要清除任何输入状态,并更新软键盘以适合新的inputType。
Nested classes |
|
---|---|
class |
InputMethodService.InputMethodImpl 提供输入方法的所有标准行为的具体实现 |
class |
InputMethodService.InputMethodSessionImpl |
class |
InputMethodService.Insets 有关输入法UI的哪些有趣部分出现的信息。 |
XML attributes |
|
---|---|
android:imeExtractEnterAnimation |
Animation to use when showing the fullscreen extract UI after it had previously been hidden. |
android:imeExtractExitAnimation |
Animation to use when hiding the fullscreen extract UI after it had previously been shown. |
android:imeFullscreenBackground |
Background to use for entire input method when it is being shown in fullscreen mode with the extract view, to ensure that it completely covers the application. |
Constants |
|
---|---|
int |
BACK_DISPOSITION_DEFAULT 后退按钮将关闭输入窗口。 |
int |
BACK_DISPOSITION_WILL_DISMISS 此输入法将消耗后退键。 |
int |
BACK_DISPOSITION_WILL_NOT_DISMISS 此输入法不会消耗后退键。 |
Inherited constants |
---|
From class android.app.Service
|
From class android.content.Context
|
From interface android.content.ComponentCallbacks2
|
Public constructors |
|
---|---|
InputMethodService() |
Public methods |
|
---|---|
boolean |
enableHardwareAcceleration() 此方法在API级别21中已弃用。从API 21开始,硬件加速始终在有能力的设备上启用。 |
int |
getBackDisposition() |
int |
getCandidatesHiddenVisibility() 未显示时,返回候选视图的可见性模式( |
InputBinding |
getCurrentInputBinding() 为输入方法返回当前活动的InputBinding,如果没有,则返回null。 |
InputConnection |
getCurrentInputConnection() 检索绑定到输入法的当前活动的InputConnection,如果没有,则返回null。 |
EditorInfo |
getCurrentInputEditorInfo() |
boolean |
getCurrentInputStarted() |
int |
getInputMethodWindowRecommendedHeight() |
LayoutInflater |
getLayoutInflater() |
int |
getMaxWidth() 返回输入法的最大宽度(以像素为单位)。 |
CharSequence |
getTextForImeAction(int imeOptions) 返回可用作给定 |
Dialog |
getWindow() |
void |
hideStatusIcon() |
void |
hideWindow() |
boolean |
isExtractViewShown() 返回是否显示全屏提取视图。 |
boolean |
isFullscreenMode() 返回输入法 当前是否以全屏模式运行。 |
boolean |
isInputViewShown() 返回软输入视图 当前是否显示给用户。 |
boolean |
isShowInputRequested() 如果我们被要求显示我们的输入视图,则返回true。 |
void |
onAppPrivateCommand(String action, Bundle data) |
void |
onBindInput() 当新客户绑定到输入法时调用。 |
void |
onComputeInsets(InputMethodService.Insets outInsets) 计算有趣的插入到您的用户界面。 |
void |
onConfigurationChanged(Configuration newConfig) 注意处理配置更改。 |
void |
onConfigureWindow(Window win, boolean isFullscreen, boolean isCandidatesOnly) 更新给定模式的给定窗口参数。 |
void |
onCreate() 服务第一次创建时由系统调用。 |
View |
onCreateCandidatesView() 创建并返回用于显示候选人的视图层次结构。 |
View |
onCreateExtractTextView() 由框架调用以创建用于显示extacted文本的布局。 |
AbstractInputMethodService.AbstractInputMethodImpl |
onCreateInputMethodInterface() 执行返回我们的标准 |
AbstractInputMethodService.AbstractInputMethodSessionImpl |
onCreateInputMethodSessionInterface() 执行返回我们的标准 |
View |
onCreateInputView() 创建并返回用于输入区域的视图层次结构(如软键盘)。 |
void |
onDestroy() 由系统调用以通知服务它已不再使用并正在被删除。 |
void |
onDisplayCompletions(CompletionInfo[] completions) 当应用程序报告自动完成候选者希望显示输入法时调用。 |
boolean |
onEvaluateFullscreenMode() 覆盖此选项以控制输入方法何时应以全屏模式运行。 |
boolean |
onEvaluateInputViewShown() 覆盖此选项以控制何时应该向用户显示软输入区域。 |
boolean |
onExtractTextContextMenuItem(int id) 当用户在全屏模式下运行时,从提取的文本视图中选择了一个上下文菜单项时,会调用这个选项。 |
void |
onExtractedCursorMovement(int dx, int dy) 这是在用户在提取的文本视图中执行光标移动时调用的,当它以全屏模式运行时。 |
void |
onExtractedSelectionChanged(int start, int end) 当用户在全屏模式下运行时,在提取的文本视图中移动光标时调用这个函数。 |
void |
onExtractedTextClicked() 当用户在全屏模式下运行时点击提取的文本视图时会调用此函数。 |
void |
onExtractingInputChanged(EditorInfo ei) 当当前在提取模式下显示当前输入目标改变时,这被称为。 |
void |
onFinishCandidatesView(boolean finishingInput) 当候选人视图对用户隐藏时调用。 |
void |
onFinishInput() 被调用以通知输入法在上一个编辑器中文本输入已完成。 |
void |
onFinishInputView(boolean finishingInput) 当输入视图对用户隐藏时调用。 |
boolean |
onGenericMotionEvent(MotionEvent event) 重写此操作可在应用程序处理它们之前拦截通用运动事件。 |
void |
onInitializeInterface() 这是子类可用于执行其接口初始化的钩子。 |
boolean |
onKeyDown(int keyCode, KeyEvent event) 重写此操作可在应用程序处理关键事件之前拦截关键事件。 |
boolean |
onKeyLongPress(int keyCode, KeyEvent event) 默认实现 |
boolean |
onKeyMultiple(int keyCode, int count, KeyEvent event) 重写此操作可在应用程序处理它们之前拦截特殊键多个事件。 |
boolean |
onKeyUp(int keyCode, KeyEvent event) 重写此操作以在应用程序处理键击事件之前拦截键事件。 |
boolean |
onShowInputRequested(int flags, boolean configChange) 系统已决定可能是显示输入法的时候了。 |
void |
onStartCandidatesView(EditorInfo info, boolean restarting) 当用户通过硬键盘输入文本时,只显示候选人视图显示处理时调用。 |
void |
onStartInput(EditorInfo attribute, boolean restarting) 打电话通知输入法文本输入已在编辑器中启动。 |
void |
onStartInputView(EditorInfo info, boolean restarting) 在显示输入视图并在新编辑器上开始输入时调用。 |
boolean |
onTrackballEvent(MotionEvent event) 重写此操作可在应用程序处理它们之前拦截轨迹球运动事件。 |
void |
onUnbindInput() 当上一个绑定客户端不再与输入方法关联时调用。 |
void |
onUpdateCursor(Rect newCursor) 此方法在API级别21中已弃用。请改用{#link onUpdateCursorAnchorInfo(CursorAnchorInfo)}。 |
void |
onUpdateCursorAnchorInfo(CursorAnchorInfo cursorAnchorInfo) 当应用程序在组合字符串中报告了文本插入点和字符的新位置时调用。 |
void |
onUpdateExtractedText(int token, ExtractedText text) 当应用程序报告由于当前文本状态更改而显示的新提取文本时调用。 |
void |
onUpdateExtractingViews(EditorInfo ei) 当全屏模式解压编辑器信息发生变化时调用,以更新其UI的状态,例如显示的动作按钮。 |
void |
onUpdateExtractingVisibility(EditorInfo ei) 当全屏模式提取编辑器信息发生变化时调用,以确定是否应显示UI的提取(提取文本和候选项)部分。 |
void |
onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) 当应用程序报告了文本的新选择区域时调用。 |
void |
onViewClicked(boolean focusChanged) 当用户点击或点击文本视图时调用。 |
void |
onWindowHidden() 在输入法窗口被用户隐藏之后调用,之前可见。 |
void |
onWindowShown() 当输入法窗口显示给用户时调用,之前不可见。 |
void |
requestHideSelf(int flags) 关闭此输入法的软输入区域,将其从显示屏上移除。 |
boolean |
sendDefaultEditorAction(boolean fromEnterKey) 请求输入目标通过 |
void |
sendDownUpKeyEvents(int keyEventCode) 将给定的按键事件代码(如 |
void |
sendKeyChar(char charCode) 将给定的UTF-16字符发送到当前的输入连接。 |
void |
setBackDisposition(int disposition) |
void |
setCandidatesView(View view) 用新的候选人视图替换当前的候选人视图。 |
void |
setCandidatesViewShown(boolean shown) 控制候选人显示区域的可见性。 |
void |
setExtractView(View view) |
void |
setExtractViewShown(boolean shown) 控制提取的文本区域的可见性。 |
void |
setInputView(View view) 用新的替换当前的输入视图。 |
void |
setTheme(int theme) 你可以调用它来自定义IME窗口使用的主题。 |
void |
showStatusIcon(int iconResId) |
void |
showWindow(boolean showInput) |
void |
switchInputMethod(String id) 强制切换到新的输入方法,如 ID所示 。 |
void |
updateFullscreenMode() 重新评估输入法是否应以全屏模式运行,并且如果自上次评估以来更改了UI,则更新其UI。 |
void |
updateInputViewShown() 重新评估当前是否显示软输入区域,并且如果自上次评估以来更改了UI,则更新其UI。 |
Protected methods |
|
---|---|
void |
dump(FileDescriptor fd, PrintWriter fout, String[] args) 执行InputMethodService内部状态的转储。 |
void |
onCurrentInputMethodSubtypeChanged(InputMethodSubtype newSubtype) 当子类型改变时调用。 |
Inherited methods |
|
---|---|
From class android.inputmethodservice.AbstractInputMethodService
|
|
From class android.app.Service
|
|
From class android.content.ContextWrapper
|
|
From class android.content.Context
|
|
From class java.lang.Object
|
|
From interface android.view.KeyEvent.Callback
|
|
From interface android.content.ComponentCallbacks2
|
|
From interface android.content.ComponentCallbacks
|
显示先前隐藏的全屏提取UI后使用的动画。
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 imeExtractEnterAnimation
。
之前显示的全屏提取用户界面隐藏时使用的动画。
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 imeExtractExitAnimation
。
当以全屏模式显示摘录视图时,用于整个输入法的背景,以确保它完全覆盖应用程序。 例如,这允许在全屏模式下隐藏候选视图,而无需在其后显示应用程序。
可能是另一种资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
可以是“ #rgb
”,“ #argb
”,“ #rrggbb
”或“ #aarrggbb
”形式的颜色值。
这对应于全局属性资源符号 imeFullscreenBackground
。
int BACK_DISPOSITION_DEFAULT
后退按钮将关闭输入窗口。
常量值:0(0x00000000)
int BACK_DISPOSITION_WILL_DISMISS
此输入法将消耗后退键。
常量值:2(0x00000002)
int BACK_DISPOSITION_WILL_NOT_DISMISS
此输入法不会消耗后退键。
常数值:1(0x00000001)
boolean enableHardwareAcceleration ()
此方法在API级别21中已弃用。
从API 21开始,在有能力的设备上始终启用硬件加速。
您可以调用此方法来尝试为您的IME启用硬件加速绘图。 这必须在onCreate()
之前onCreate()
,因此您通常会在构造函数中调用它。 在IME中使用硬件加速绘图并不总是可能的(例如,在没有资源支持的低端设备上),所以如果成功则返回true,否则返回false,如果您需要绘制软件。 你必须能够处理这两种情况。
Returns | |
---|---|
boolean |
int getCandidatesHiddenVisibility ()
未显示时,返回候选人视图的可见性模式( View.INVISIBLE
或View.GONE
)。 当isExtractViewShown()
返回true时,默认实现返回GONE,否则返回VISIBLE。 如果在其他情况下更改此选项以返回GONE,请小心 - 如果显示或隐藏候选视图会导致窗口大小调整,则可能会在调整大小时发生临时绘图工件。
Returns | |
---|---|
int |
InputBinding getCurrentInputBinding ()
为输入方法返回当前活动的InputBinding,如果没有,则返回null。
Returns | |
---|---|
InputBinding |
InputConnection getCurrentInputConnection ()
检索绑定到输入法的当前活动的InputConnection,如果没有,则返回null。
Returns | |
---|---|
InputConnection |
EditorInfo getCurrentInputEditorInfo ()
Returns | |
---|---|
EditorInfo |
int getInputMethodWindowRecommendedHeight ()
Returns | |
---|---|
int |
The recommended height of the input method window. An IME author can get the last input method's height as the recommended height by calling this in onStartInputView(EditorInfo, boolean) . If you don't need to use a predefined fixed height, you can avoid the window-resizing of IME switching by using this value as a visible inset height. It's efficient for the smooth transition between different IMEs. However, note that this may return 0 (or possibly unexpectedly low height). You should thus avoid relying on the return value of this method all the time. Please make sure to use a reasonable height for the IME. |
int getMaxWidth ()
返回输入法的最大宽度(以像素为单位)。 输入方法位于屏幕的底部,除非全屏运行,否则通常希望尽可能短,因此应根据其内容计算其高度。 但是,它们可以根据需要水平伸展。 该函数向您返回水平可用的最大空间量,如果UI位置需要,您可以使用该空间量。
在许多情况下,这不是必需的,您可以只依靠普通的视图布局机制来将视图放置在给定输入方法的完整水平空间内。
请注意,此值可以动态更改,特别是在屏幕方向更改时。
Returns | |
---|---|
int |
CharSequence getTextForImeAction (int imeOptions)
返回可用作给定EditorInfo.imeOptions
的按钮标签的EditorInfo.imeOptions
。 如果没有请求的操作,则返回null。 请注意,不能保证返回的文本会相对较短,因此您可能不希望将其用作软键盘标签上的文字。
Parameters | |
---|---|
imeOptions |
int : The value from @link EditorInfo#imeOptions EditorInfo.imeOptions}. |
Returns | |
---|---|
CharSequence |
Returns a label to use, or null if there is no action. |
boolean isExtractViewShown ()
返回是否显示全屏提取视图。 如果isFullscreenMode()
返回true,这将只返回true,在这种情况下,它的值取决于最后一次调用setExtractViewShown(boolean)
。 这实际上可以让你确定应用程序窗口是否完全覆盖(当它返回true时)或者它的某些部分可能被显示(如果返回false,但如果isFullscreenMode()
在那种情况下返回true,那么它可能仅仅是应用)。
Returns | |
---|---|
boolean |
boolean isFullscreenMode ()
返回输入法当前是否以全屏模式运行。 这是最后由updateFullscreenMode()
确定并应用的updateFullscreenMode()
。
Returns | |
---|---|
boolean |
boolean isInputViewShown ()
返回软输入视图当前是否显示给用户。 这是最后由updateInputViewShown()
确定和应用的updateInputViewShown()
。
Returns | |
---|---|
boolean |
boolean isShowInputRequested ()
如果我们被要求显示我们的输入视图,则返回true。
Returns | |
---|---|
boolean |
void onAppPrivateCommand (String action, Bundle data)
Parameters | |
---|---|
action |
String
|
data |
Bundle
|
void onBindInput ()
当新客户绑定到输入法时调用。 随着用户在其UI中导航,可能会跟随一系列的onStartInput(EditorInfo, boolean)
和onFinishInput()
调用。 通过这个调用你知道getCurrentInputBinding()
和getCurrentInputConnection()
返回有效的对象。
void onComputeInsets (InputMethodService.Insets outInsets)
计算有趣的插入到您的用户界面。 默认实现使用可见插图的候选帧的顶部,以及内容插入的输入帧的顶部。 默认可触摸的插图是TOUCHABLE_INSETS_VISIBLE
。
请注意,当 isExtractViewShown()
返回true时,此方法不会被调用,因为在这种情况下,应用程序保持原样位于输入方法后面,并且不会受其UI中的任何内容影响。
Parameters | |
---|---|
outInsets |
InputMethodService.Insets : Fill in with the current UI insets. |
void onConfigurationChanged (Configuration newConfig)
注意处理配置更改。 InputMethodService的子类通常不需要直接处理它; 这里的标准实现需要通过配置更改来重新生成输入方法UI,因此您可以依赖于您的onCreateInputView()
和其他方法,因为配置更改而被调用。
当配置更改发生时, onInitializeInterface()
保证在其他任何输入或UI创建回调之前被下一次调用。 以下将被称为立即根据是否适合于当前状态: onStartInput(EditorInfo, boolean)
,如果输入是活动的,并且onCreateInputView()
个onStartInputView(EditorInfo, boolean)
和相关相应的功能,如果显示的UI。
Parameters | |
---|---|
newConfig |
Configuration : The new device configuration. |
void onConfigureWindow (Window win, boolean isFullscreen, boolean isCandidatesOnly)
更新给定模式的给定窗口参数。 这是在窗口第一次显示时以及每次全屏或仅限候选模式改变时调用的。
默认实现在全屏模式下为窗口MATCH_PARENT x MATCH_PARENT生成布局,在非全屏模式下生成MATCH_PARENT x WRAP_CONTENT。
Parameters | |
---|---|
win |
Window : The input method's window. |
isFullscreen |
boolean : If true, the window is running in fullscreen mode and intended to cover the entire application display. |
isCandidatesOnly |
boolean : If true, the window is only showing the candidates view and none of the rest of its UI. This is mutually exclusive with fullscreen mode. |
View onCreateCandidatesView ()
创建并返回用于显示候选人的视图层次结构。 当候选人第一次显示时,这将被调用一次。 您可以返回null以便没有候选人查看; 默认实现返回null。
要控制候选人视图何时显示,请使用setCandidatesViewShown(boolean)
。 在通过此功能创建第一个视图后更改候选视图,请使用setCandidatesView(View)
。
Returns | |
---|---|
View |
View onCreateExtractTextView ()
由框架调用以创建用于显示extacted文本的布局。 仅在全屏模式下调用。 返回的视图层次必须有一个ExtractEditText
其ID是inputExtractEditText
。
Returns | |
---|---|
View |
AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface ()
执行返回我们的标准InputMethodService.InputMethodImpl
。 子类可以覆盖以提供他们自己的定制版本。
Returns | |
---|---|
AbstractInputMethodService.AbstractInputMethodImpl |
AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface ()
执行返回我们的标准InputMethodService.InputMethodSessionImpl
。 子类可以覆盖以提供他们自己的定制版本。
Returns | |
---|---|
AbstractInputMethodService.AbstractInputMethodSessionImpl |
View onCreateInputView ()
创建并返回用于输入区域的视图层次结构(如软键盘)。 当输入区首次显示时,这将被调用一次。 您可以返回null以便没有输入区域; 默认实现返回null。
要控制何时显示输入视图,请执行onEvaluateInputViewShown()
。 要在此功能创建第一个视图后更改输入视图,请使用setInputView(View)
。
Returns | |
---|---|
View |
void onDestroy ()
由系统调用以通知服务它已不再使用并正在被删除。 这个服务应该清理它所拥有的任何资源(线程,注册接收者等)。 返回后,将不会有更多的调用这个服务对象,它实际上已经死了。 不要直接调用这个方法。
void onDisplayCompletions (CompletionInfo[] completions)
当应用程序报告自动完成候选者希望显示输入法时调用。 通常,这些仅在输入方法以全屏模式运行时使用,否则用户可以看到应用程序显示的完成的弹出窗口并与其交互。
这里的默认实现什么都不做。
Parameters | |
---|---|
completions |
CompletionInfo
|
boolean onEvaluateFullscreenMode ()
覆盖此选项以控制输入方法何时应以全屏模式运行。 仅当屏幕处于横向模式时,默认实现才会以fullsceen运行。 如果您更改了返回的内容,则只要返回的值可能已更改为重新评估和应用,就需要updateFullscreenMode()
调用updateFullscreenMode()
。
Returns | |
---|---|
boolean |
boolean onEvaluateInputViewShown ()
覆盖此选项以控制何时应该向用户显示软输入区域。 当没有硬键盘或键盘被隐藏时,默认实现将返回false
,除非用户表示有意使用软键盘。 如果您更改了返回的内容,则只要返回的值可能已更改为重新评估和应用,就需要updateInputViewShown()
调用updateInputViewShown()
。
当你重写此方法,建议拨打 super.onEvaluateInputViewShown()
并返回 true
时 true
返回。
Returns | |
---|---|
boolean |
boolean onExtractTextContextMenuItem (int id)
当用户在全屏模式下运行时,从提取的文本视图中选择了一个上下文菜单项时,会调用这个选项。 默认实现将此操作发送给当前InputConnection的performContextMenuAction(int)
,以便在底层的“真实”编辑器中对其进行处理。 重新实现这个以提供你想要的任何行为。
Parameters | |
---|---|
id |
int
|
Returns | |
---|---|
boolean |
void onExtractedCursorMovement (int dx, int dy)
这是在用户在提取的文本视图中执行光标移动时调用的,当它以全屏模式运行时。 当垂直移动发生时,默认实现会隐藏候选视图,但只有当提取的文本编辑器由于其文本不适合而具有垂直滚动条时才会隐藏。 重新实现这个以提供你想要的任何行为。
Parameters | |
---|---|
dx |
int : The amount of cursor movement in the x dimension. |
dy |
int : The amount of cursor movement in the y dimension. |
void onExtractedSelectionChanged (int start, int end)
当用户在全屏模式下运行时,在提取的文本视图中移动光标时调用这个函数。 默认实现在底层文本编辑器上执行相应的选择更改。
Parameters | |
---|---|
start |
int
|
end |
int
|
void onExtractedTextClicked ()
当用户在全屏模式下运行时点击提取的文本视图时会调用此函数。 当这种情况发生时,默认实现会隐藏候选视图,但只有当提取的文本编辑器由于其文本不适合而具有垂直滚动条时才会隐藏。 重新实现这个以提供你想要的任何行为。
void onExtractingInputChanged (EditorInfo ei)
当当前在提取模式下显示当前输入目标改变时,这被称为。 如果新目标不是完整的编辑器,默认实现将自动隐藏IME,因为这对用户来说可能是一种令人困惑的体验。
Parameters | |
---|---|
ei |
EditorInfo
|
void onFinishCandidatesView (boolean finishingInput)
当候选人视图对用户隐藏时调用。 这将在隐藏窗口之前或在切换到另一个目标进行编辑之前调用。
默认实现使用InputConnection来清除任何活动的组成文本; 你可以重写这个(不调用基类实现)来执行你想要的任何行为。
Parameters | |
---|---|
finishingInput |
boolean : If true, onFinishInput() will be called immediately after. |
void onFinishInput ()
被调用以通知输入法在上一个编辑器中文本输入已完成。 此时,可能会调用onStartInput(EditorInfo, boolean)
在新编辑器中执行输入,或者输入法可能会空闲。 当输入在同一编辑器中重新启动时,此方法不会被调用。
默认实现使用InputConnection来清除任何活动的组成文本; 你可以重写这个(不调用基类实现)来执行你想要的任何行为。
void onFinishInputView (boolean finishingInput)
当输入视图对用户隐藏时调用。 这将在隐藏窗口之前或在切换到另一个目标进行编辑之前调用。
默认实现使用InputConnection来清除任何活动的组成文本; 你可以重写这个(不调用基类实现)来执行你想要的任何行为。
Parameters | |
---|---|
finishingInput |
boolean : If true, onFinishInput() will be called immediately after. |
boolean onGenericMotionEvent (MotionEvent event)
重写此操作可在应用程序处理它们之前拦截通用运动事件。 如果您返回true,则应用程序不会自行处理该事件。 如果您返回false,则正常的应用程序处理将发生,仿佛IME根本没有看到该事件。
Parameters | |
---|---|
event |
MotionEvent : The motion event being received. |
Returns | |
---|---|
boolean |
True if the event was handled in this function, false otherwise. |
void onInitializeInterface ()
这是子类可用于执行其接口初始化的钩子。 在创建任何UI对象之前,它都会在您首次创建服务并进行配置更改之后调用。
boolean onKeyDown (int keyCode, KeyEvent event)
重写此操作可在应用程序处理关键事件之前拦截关键事件。 如果您返回true,则应用程序不会处理事件本身。 如果您返回false,则正常的应用程序处理将发生,仿佛IME根本没有看到该事件。
如果当前显示IME,则默认实现拦截KeyEvent.KEYCODE_BACK
,以便在键上升时(如果未取消或长按)隐藏它。 此外,仅在全屏模式下,它将使用DPAD移动事件来移动提取的文本视图中的光标,而不允许它们在底层应用程序中执行导航。
Parameters | |
---|---|
keyCode |
int
|
event |
KeyEvent
|
Returns | |
---|---|
boolean |
boolean onKeyLongPress (int keyCode, KeyEvent event)
默认实现 KeyEvent.Callback.onKeyLongPress()
:始终返回false(不处理事件)。
Parameters | |
---|---|
keyCode |
int
|
event |
KeyEvent
|
Returns | |
---|---|
boolean |
boolean onKeyMultiple (int keyCode, int count, KeyEvent event)
重写此操作可在应用程序处理它们之前拦截特殊键多个事件。 如果您返回true,则应用程序不会自行处理该事件。 如果您返回false,则正常的应用程序处理将发生,仿佛IME根本没有看到该事件。
默认实现总是返回false,除非在全屏模式下,它将使用DPAD移动事件来移动提取的文本视图中的光标,而不允许它们在底层应用程序中执行导航。
Parameters | |
---|---|
keyCode |
int
|
count |
int
|
event |
KeyEvent
|
Returns | |
---|---|
boolean |
boolean onKeyUp (int keyCode, KeyEvent event)
重写此操作以在应用程序处理键击事件之前拦截键事件。 如果您返回true,则应用程序不会自行处理该事件。 如果您返回false,则正常的应用程序处理将发生,仿佛IME根本没有看到该事件。
默认实现拦截KeyEvent.KEYCODE_BACK
以隐藏当前IME UI(如果显示)。 此外,仅在全屏模式下,它将使用DPAD移动事件来移动提取的文本视图中的光标,而不允许它们在底层应用程序中执行导航。
Parameters | |
---|---|
keyCode |
int
|
event |
KeyEvent
|
Returns | |
---|---|
boolean |
boolean onShowInputRequested (int flags, boolean configChange)
系统已决定可能是显示输入法的时候了。 这是由于对您的InputMethod.showSoftInput()
方法的相应调用而被调用的。 默认实现使用onEvaluateInputViewShown()
, onEvaluateFullscreenMode()
,当前的配置来决定是否输入视图应该在这一点上显示。
Parameters | |
---|---|
flags |
int : Provides additional information about the show request, as per InputMethod.showSoftInput() . |
configChange |
boolean : This is true if we are re-showing due to a configuration change. |
Returns | |
---|---|
boolean |
Returns true to indicate that the window should be shown. |
void onStartCandidatesView (EditorInfo info, boolean restarting)
当用户通过硬键盘输入文本时,只显示候选人视图显示处理时调用。 这将始终在onStartInput(EditorInfo, boolean)
之后onStartInput(EditorInfo, boolean)
,允许您在onStartInput(EditorInfo, boolean)
进行常规设置,并在此处仅进行特定于视图的设置。 您保证在调用此函数前一段时间会调用onCreateCandidatesView()
。
请注意,当输入法以完全编辑模式运行时,将不会调用此方法,因此将接收onStartInputView(EditorInfo, boolean)
以启动该操作。 这仅适用于在输入法编辑器处于隐藏状态时显示候选项的情况,但希望通过其他机制输入文本时显示其候选项UI。
Parameters | |
---|---|
info |
EditorInfo : Description of the type of text being edited. |
restarting |
boolean : Set to true if we are restarting input on the same text field as before. |
void onStartInput (EditorInfo attribute, boolean restarting)
打电话通知输入法文本输入已在编辑器中启动。 您应该使用此回调函数来初始化您的输入的状态以匹配给它的编辑器的状态。
Parameters | |
---|---|
attribute |
EditorInfo : The attributes of the editor that input is starting in. |
restarting |
boolean : Set to true if input is restarting in the same editor such as because the application has changed the text in the editor. Otherwise will be false, indicating this is a new session with the editor. |
void onStartInputView (EditorInfo info, boolean restarting)
在显示输入视图并在新编辑器上开始输入时调用。 这将始终在onStartInput(EditorInfo, boolean)
之后被调用,从而允许您在此进行常规设置,并在此处进行特定于视图的设置。 我们保证onCreateInputView()
在调用这个函数之前会被调用。
Parameters | |
---|---|
info |
EditorInfo : Description of the type of text being edited. |
restarting |
boolean : Set to true if we are restarting input on the same text field as before. |
boolean onTrackballEvent (MotionEvent event)
重写此操作可在应用程序处理它们之前拦截轨迹球运动事件。 如果您返回true,则应用程序不会自行处理该事件。 如果您返回false,则正常的应用程序处理将发生,仿佛IME根本没有看到该事件。
Parameters | |
---|---|
event |
MotionEvent : The motion event being received. |
Returns | |
---|---|
boolean |
True if the event was handled in this function, false otherwise. |
void onUnbindInput ()
当上一个绑定客户端不再与输入方法关联时调用。 返回后getCurrentInputBinding()
和getCurrentInputConnection()
将不再返回有效的对象。
void onUpdateCursor (Rect newCursor)
此方法在API级别21中已弃用。
改为使用{#link onUpdateCursorAnchorInfo(CursorAnchorInfo)}。
当应用程序报告了文本光标的新位置时调用。 这只有在输入法明确要求时才会调用。 默认实现什么都不做。
Parameters | |
---|---|
newCursor |
Rect
|
void onUpdateCursorAnchorInfo (CursorAnchorInfo cursorAnchorInfo)
当应用程序在组合字符串中报告了文本插入点和字符的新位置时调用。 这只有在输入法明确要求时才会调用。 默认实现什么都不做。
Parameters | |
---|---|
cursorAnchorInfo |
CursorAnchorInfo : The positional information of the text insertion point and the composition string. |
void onUpdateExtractedText (int token, ExtractedText text)
当应用程序报告由于当前文本状态更改而显示的新提取文本时调用。 当输入法以全屏模式运行时,此处的默认实现将新文本放置在提取编辑文本中。
Parameters | |
---|---|
token |
int
|
text |
ExtractedText
|
void onUpdateExtractingViews (EditorInfo ei)
当全屏模式解压编辑器信息发生变化时调用,以更新其UI的状态,例如显示的动作按钮。 如果您使用标准全屏解压缩UI,则无需处理此操作。 如果替换它,您将需要重新实现此操作,以将相应的操作按钮放入您自己的用户界面中并对其进行处理,并执行任何其他更改。
标准实现根据是否存在动作按钮打开或关闭其附属区域,并根据是否适合当前编辑器隐藏或显示整个抽取区域。 特别是, TYPE_NULL
或TYPE_TEXT_VARIATION_FILTER
输入类型将关闭提取区域,因为没有要显示的文本。
Parameters | |
---|---|
ei |
EditorInfo
|
void onUpdateExtractingVisibility (EditorInfo ei)
当全屏模式提取编辑器信息发生变化时调用,以确定是否应显示UI的提取(提取文本和候选项)部分。 标准实现根据当前编辑器是否有意义隐藏或显示提取区域。 特别是, TYPE_NULL
输入类型或IME_FLAG_NO_EXTRACT_UI
标志将关闭提取区域,因为没有要显示的文本。
Parameters | |
---|---|
ei |
EditorInfo
|
void onUpdateSelection (int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)
当应用程序报告了文本的新选择区域时调用。 这称为输入法是否请求提取文本更新,但如果提取的文本已更改,则它将不会接收此调用。
请注意使用setComposingText,commitText或deleteSurroundingText等方法更改文本以响应此调用。 如果光标因此而移动,则会再次调用此方法,这可能会导致无限循环。
如果正在显示提取文本,则默认实现会更新光标。
Parameters | |
---|---|
oldSelStart |
int
|
oldSelEnd |
int
|
newSelStart |
int
|
newSelEnd |
int
|
candidatesStart |
int
|
candidatesEnd |
int
|
void onViewClicked (boolean focusChanged)
当用户点击或点击文本视图时调用。 IME不能依赖于被调用的方法,因为这不是原始IME协议的一部分,所以在此方法出现之前编写自定义文本编辑的应用程序不会调用IME来通知此交互。
Parameters | |
---|---|
focusChanged |
boolean : true if the user changed the focused view by this click. |
void onWindowShown ()
当输入法窗口显示给用户时调用,之前不可见。 这是在窗口的所有UI设置发生后(创建其视图等)完成的。
void requestHideSelf (int flags)
关闭此输入法的软输入区域,将其从显示屏上移除。 输入法将继续运行,但用户不能再通过触摸屏幕使用它来生成输入。
Parameters | |
---|---|
flags |
int : Provides additional operating flags. Currently may be 0 or have the InputMethodManager.HIDE_IMPLICIT_ONLY bit set. |
boolean sendDefaultEditorAction (boolean fromEnterKey)
请求输入目标通过 InputConnection.performEditorAction()
执行其默认操作。
Parameters | |
---|---|
fromEnterKey |
boolean : If true, this will be executed as if the user had pressed an enter key on the keyboard, that is it will not be done if the editor has set EditorInfo.IME_FLAG_NO_ENTER_ACTION . If false, the action will be sent regardless of how the editor has set that flag. |
Returns | |
---|---|
boolean |
Returns a boolean indicating whether an action has been sent. If false, either the editor did not specify a default action or it does not want an action from the enter key. If true, the action was sent (or there was no input connection at all). |
void sendDownUpKeyEvents (int keyEventCode)
将给定键事件代码(如KeyEvent
所定义的)发送到当前输入连接是一个键+键事件对。 发送的事件有KeyEvent.FLAG_SOFT_KEYBOARD
集,以便收件人可以将它们标识为来自软件输入方法和KeyEvent.FLAG_KEEP_TOUCH_MODE
,以便它们不会影响UI的当前触摸模式。
请注意,在正常操作中发送此类重要事件是不鼓励的; 这主要用于TYPE_NULL
类型的文本字段,或者用于非丰富的输入方法。 合理的软件输入方法应该使用commitText(CharSequence, int)
系列方法向应用程序发送文本,而不是发送关键事件。
Parameters | |
---|---|
keyEventCode |
int : The raw key code to send, as defined by KeyEvent . |
void sendKeyChar (char charCode)
将给定的UTF-16字符发送到当前的输入连接。 大多数角色将通过简单地通过与角色呼叫InputConnection.commitText()
来传递; 但是,有些可能会有所不同。 特别是,输入字符('\ n')将作为操作代码或原始键事件(视情况而定)提供。 把这看作是一种便利的方法,用于没有全面实施行动的IME; 完全符合的IME将决定每个事件的正确动作,并且可能永远不会调用此方法,除非处理来自实际硬件键盘的事件。
Parameters | |
---|---|
charCode |
char : The UTF-16 character code to send. |
void setBackDisposition (int disposition)
Parameters | |
---|---|
disposition |
int
|
void setCandidatesView (View view)
用新的候选人视图替换当前的候选人视图。 你只需要在动态改变视图时调用它; 通常,您应该实现onCreateCandidatesView()
并在输入方法首次需要时创建视图。
Parameters | |
---|---|
view |
View
|
void setCandidatesViewShown (boolean shown)
控制候选人显示区域的可见性。 默认情况下它是隐藏的。
Parameters | |
---|---|
shown |
boolean
|
void setExtractViewShown (boolean shown)
控制提取的文本区域的可见性。 这仅适用于输入法处于全屏模式时显示提取的文本。 如果为false,则不会显示提取的文本,从而可以看到后面的一些应用程序。 这通常由您设置onUpdateExtractingVisibility(EditorInfo)
。 这将控制提取的文本和候选视图的可见性; 后者是因为如果没有文本可见,它是无用的。
Parameters | |
---|---|
shown |
boolean
|
void setInputView (View view)
用新的替换当前的输入视图。 你只需要在动态改变视图时调用它; 通常,您应该实现onCreateInputView()
并在输入方法首次需要时创建您的视图。
Parameters | |
---|---|
view |
View
|
void setTheme (int theme)
你可以调用它来自定义IME窗口使用的主题。 这个主题通常应该来自Theme_InputMethod
,这是您将获得的默认主题。 这必须在onCreate()
之前onCreate()
,因此您通常会在您的构造函数中使用您的自定义主题的资源ID来调用它。
Parameters | |
---|---|
theme |
int : The style resource describing the theme. |
void switchInputMethod (String id)
强制切换到新的输入方法,如ID所示 。 该输入方法将被销毁,并且请求的输入方法在当前输入字段上启动。
Parameters | |
---|---|
id |
String : Unique identifier of the new input method ot start. |
void updateFullscreenMode ()
重新评估输入法是否应以全屏模式运行,并且如果自上次评估以来更改了UI,则更新其UI。 这将调用onEvaluateFullscreenMode()
来确定它是否应该当前以全屏模式运行。 您可以使用isFullscreenMode()
确定输入法当前是否以全屏模式运行。
void updateInputViewShown ()
重新评估当前是否显示软输入区域,并且如果自上次评估以来更改了UI,则更新其UI。 这将调用onEvaluateInputViewShown()
来确定当前是否显示输入视图。 您可以使用isInputViewShown()
来确定当前是否显示输入视图。
void dump (FileDescriptor fd, PrintWriter fout, String[] args)
执行InputMethodService内部状态的转储。 重写将自己的信息添加到转储。
Parameters | |
---|---|
fd |
FileDescriptor : The raw file descriptor that the dump is being sent to. |
fout |
PrintWriter : The PrintWriter to which you should dump your state. This will be closed for you after you return. |
args |
String : additional arguments to the dump request. |
void onCurrentInputMethodSubtypeChanged (InputMethodSubtype newSubtype)
当子类型改变时调用。
Parameters | |
---|---|
newSubtype |
InputMethodSubtype : the subtype which is being changed to. |