Share via


InputMethodManager 类

定义

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

[Android.Runtime.Register("android/view/inputmethod/InputMethodManager", DoNotGenerateAcw=true)]
public sealed class InputMethodManager : Java.Lang.Object
[<Android.Runtime.Register("android/view/inputmethod/InputMethodManager", DoNotGenerateAcw=true)>]
type InputMethodManager = class
    inherit Object
继承
InputMethodManager
属性

注解

整个输入法框架的中央系统 API (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

此处涵盖的主题: <ol<>li>体系结构概述<li>Applications<li>Input Methods<li>Security</ol>

“体系结构概述”><h3>体系结构概述</h3>

输入法框架 (IMF) 体系结构涉及三个主要方:

<ul><li> 此类 <表示的强>输入法管理器</strong> 是管理所有其他部分之间交互的系统的中心点。 此处,它表示为客户端 API,它存在于每个应用程序上下文中,并与管理所有进程中交互的全局系统服务进行通信。 <li> (<IME) </strong> 的强>输入法实现允许用户生成文本的特定交互模型。 系统绑定到正在使用的当前输入法,导致创建并运行它,并告知它何时隐藏和显示其 UI。 一次只运行一个 IME。 <li> 多个 <强>客户端应用程序</强> 仲裁与输入法管理器的输入焦点和控制输入法的状态。 一次只有一个此类客户端处于活动状态, (使用 IME) 。 </ul>

“Applications”><h3>Applications</h3>

在大多数情况下,使用标准 android.widget.TextView 或其子类的应用程序几乎不需要执行任何操作来很好地使用软输入方法。 需要注意main事项包括:

<ul><li> 在可编辑文本视图中正确设置 android.R.attr#inputType ,以便输入方法具有足够的上下文来帮助用户输入文本。 <li> 处理在显示输入法时丢失的屏幕空间。 理想情况下,应用程序应处理其窗口大小较小,但如果需要,它可以依赖于执行窗口平移的系统。 应在活动上设置 android.R.attr#windowSoftInputMode 属性或创建的窗口上的相应值,以帮助系统确定是平移还是重设大小, (它会自动尝试确定,但可能会) 出错。 <li> 还可以使用相同的 android.R.attr#windowSoftInputMode 属性控制窗口的首选软输入状态 (打开、关闭等) 。 </ul>

更精细的控制可通过此处的 API 直接与 IMF 及其 IME 交互-显示或隐藏输入区域,允许用户选择输入方法,等等。

对于我们中的少数人编写自己的文本编辑器,你需要实现 android.view.View#onCreateInputConnection 以返回你自己的 InputConnection 接口的新实例,允许 IME 与编辑器交互。

“InputMethods”><h3>输入方法</h3>

输入法 (输入法) 实现为 android.app.Service,通常派生自 android.inputmethodservice.InputMethodService。 它必须提供核心 InputMethod 接口,但这通常由 android.inputmethodservice.InputMethodService 处理,实现者只需在那里处理更高级别的 API。

有关实现 IME 的详细信息, android.inputmethodservice.InputMethodService 请参阅 类。

“安全性”><h3>安全性</h3>

与输入法相关的安全问题很多,因为它们基本上可以自由地完全驱动 UI 并监视用户输入的所有内容。 Android 输入法框架还允许任意第三方 IME,因此必须注意限制其选择和交互。

以下是有关 IMF 背后的安全体系结构的一些要点:

<ul><li>

仅允许系统通过 android.Manifest.permission#BIND_INPUT_METHOD 权限直接访问 IME 的InputMethod接口。 这是通过不绑定到不需要此权限的输入法服务在系统中强制实施的,因此系统可以保证没有其他不受信任的客户端在其控制之外访问当前输入法。

<李>

IMF可能有许多客户流程,但一次只能有一个处于活动状态。 非活动客户无法通过下述机制与国际货币基金组织的关键部分进行交互。

<李>

输入方法的客户端只能访问其 InputMethodSession 接口。 为每个客户端创建此接口的一个实例,当前 IME 仅处理来自与活动客户端关联的会话的调用。 对于正常的 IME,这由 android.inputmethodservice.AbstractInputMethodService 强制实施,但必须由自定义原始 InputMethodSession 实现的 IME 显式处理。

<李>

只有活动客户端的 InputConnection 将接受操作。 IMF 告知每个客户端进程是否处于活动状态,框架强制在非活动进程中对当前 InputConnection 的调用将被忽略。 这可确保当前 IME 只能将事件和文本编辑传送到用户视为焦点的 UI。

<李>

屏幕关闭时,输入法永远无法与 InputConnection 交互。 这是通过使所有客户端在屏幕关闭时处于非活动状态来实施的,并在用户无法意识到其行为时防止不良 IME 驱动 UI。

<李>

客户端应用程序可以要求系统允许用户选取新的 IME,但不能以编程方式自行切换到 IME。 这可避免恶意应用程序将用户切换到其自己的 IME,当用户导航到另一个应用程序时,该输入法仍保持运行状态。 另一方面, <><> IME 允许以编程方式将系统切换到另一个 IME,因为它已完全控制用户输入。

<李>

用户必须先在设置中显式启用新的 IME,然后才能切换到它,以便与系统确认他们知道该输入法并想要使其可供使用。

</ul>

如果应用面向 Android 11 (API 级别 30) 或更高,则此类中的方法均返回按包可见性规则筛选的结果,当前连接的 IME 除外。 具有查询的应用 InputMethod#SERVICE_INTERFACE ,请参阅所有 IME。

android.view.inputmethod.InputMethodManagerJava 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

字段

ShowForced

标志 #showSoftInput 指示用户已强制打开输入法 ((例如,通过长按菜单) ),因此在用户显式关闭之前,不应关闭输入法。

ShowImplicit
已过时.

#showSoftInput 标志指示这是显示输入窗口的隐式请求,而不是用户直接请求的结果。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
CurrentInputMethodInfo

返回 InputMethodInfo 进程用户) 当前所选输入法 (的 。

CurrentInputMethodSubtype

返回当前输入法子类型。

EnabledInputMethodList

返回已启用的输入方法的列表。

Handle

基础 Android 实例的句柄。

(继承自 Object)
InputMethodList

返回已安装输入法的列表。

IsAcceptingText

如果当前提供的视图接受全文编辑,则返回 true

IsActive

如果输入法的任何视图当前处于活动状态,则返回 true

IsFullscreenMode

允许你发现附加的输入法是否在全屏模式下运行。

IsInputMethodSuppressingSpellChecker

如果输入法禁止系统拼写检查器,则返回 true

IsStylusHandwritingAvailable

如果当前选择的 true IME 支持触笔手写 & 启用,则返回 。

JniIdentityHashCode

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
JniPeerMembers

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

LastInputMethodSubtype

返回系统历史记录中使用的 InputMethodSubtype 最后一个 。

PeerReference

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
ShortcutInputMethodsAndSubtypes

返回所有快捷方式输入法信息及其子类型的映射。

ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)
ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)

方法

AcceptStylusHandwritingDelegation(View)

如果以前使用 #prepareStylusHandwritingDelegation(View) 委托人请求手写启动委派,则接受并启动委托视图上的触笔手写会话。

AcceptStylusHandwritingDelegation(View, String)

接受并启动委托视图上的触笔手写会话,如果以前使用 #prepareStylusHandwritingDelegation(View, String) 委托人请求手写启动委派,并且该视图属于指定的委托包。

Clone()

创建并返回此对象的副本。

(继承自 Object)
DispatchKeyEventFromInputMethod(View, KeyEvent)

提供 的默认实现,该实现 InputConnection#sendKeyEvent(KeyEvent)预期会根据给定 View 和当前焦点状态,将从 IME 发送到相应事件目标的键盘事件。

DisplayCompletions(View, CompletionInfo[])
Dispose()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
Dispose(Boolean)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
Equals(Object)

指示其他某个对象是否“等于”此对象。

(继承自 Object)
FromContext(Context)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

GetEnabledInputMethodSubtypeList(InputMethodInfo, Boolean)

返回指定输入法信息的已启用输入法子类型的列表。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
HideSoftInputFromInputMethod(IBinder, HideSoftInputFlags)

关闭/隐藏输入法的软输入区域,以便用户不再看到它或无法与之交互。

HideSoftInputFromWindow(IBinder, HideSoftInputFlags)

不带结果的 同 #hideSoftInputFromWindow(IBinder, int, ResultReceiver) 义词:请求在当前接受输入的窗口上下文中隐藏软输入窗口。

HideSoftInputFromWindow(IBinder, HideSoftInputFlags, ResultReceiver)

请求在当前接受输入的窗口上下文中隐藏软输入窗口。

HideStatusIcon(IBinder)

此成员已弃用。

InvalidateInput(View)

向系统提示,与 view 关联的文本由不是输入法编辑器 (输入法编辑器) 的内容进行更新,以便系统可以从 IME 取消任何挂起的文本编辑请求,直到它收到新的编辑上下文,例如提供的 InputConnection#takeSnapshot()周围文本。

InvokeIsActive(View)

如果给定视图是输入法的当前活动视图,则返回 true

IsWatchingCursor(View)
已过时.

如果当前输入法想要watch输入编辑器的光标在其窗口中的位置,则返回 true。

JavaFinalize()

当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
PrepareStylusHandwritingDelegation(View)

准备将启动触笔手写会话委托到与检测到初始手写笔划的视图相同或不同的窗口中的不同编辑器。

PrepareStylusHandwritingDelegation(View, String)

准备将启动触笔手写会话委托给相同或不同包中不同窗口中的不同编辑器,而不是检测到初始手写笔划的视图。

RestartInput(View)

如果输入法当前已连接到给定视图,请使用其新内容重新启动它。

SendAppPrivateCommand(View, String, Bundle)

调用 InputMethodSession#appPrivateCommand(String, Bundle) InputMethodSession.appPrivateCommand() 当前输入法。

SetAdditionalInputMethodSubtypes(String, InputMethodSubtype[])

设置其他输入法子类型。

SetCurrentInputMethodSubtype(InputMethodSubtype)

切换到当前输入法的新输入法子类型。

SetExplicitlyEnabledInputMethodSubtypes(String, Int32[])

汇报为调用进程拥有的给定 IME 显式启用InputMethodSubtype的列表。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
SetInputMethod(IBinder, String)

强制切换到新的输入法组件。

SetInputMethodAndSubtype(IBinder, String, InputMethodSubtype)

强制切换到新的输入法和子类型。

ShouldOfferSwitchingToNextInputMethod(IBinder)

如果当前 IME 需要为用户提供切换到下一个输入法 (e 的方法,则返回 true。

ShowInputMethodAndSubtypeEnabler(String)

显示用于启用指定输入法子类型的设置。

ShowInputMethodPicker()

显示 IME 选取器弹出窗口。

ShowSoftInput(View, ShowFlags)

#showSoftInput(View, int, ResultReceiver)不带结果接收器的 同义词:根据需要显式请求向用户显示当前输入法的软输入区域。

ShowSoftInput(View, ShowFlags, ResultReceiver)

如果需要,显式请求向用户显示当前输入法的软输入区域。

ShowSoftInputFromInputMethod(IBinder, ShowFlags)

显示输入法的软输入区域,以便用户看到输入法窗口并可以与之交互。

ShowStatusIcon(IBinder, String, Int32)

此成员已弃用。

StartStylusHandwriting(View)

启动触笔手写会话。

SwitchToLastInputMethod(IBinder)

强制切换到上次使用的输入法和子类型。

SwitchToNextInputMethod(IBinder, Boolean)

强制切换到下一个输入法和子类型。

ToArray<T>()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
ToggleSoftInput(ShowFlags, HideSoftInputFlags)

此方法切换输入法窗口显示。

ToggleSoftInputFromWindow(IBinder, ShowSoftInputFlags, HideSoftInputFlags)

此方法切换输入法窗口显示。

ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
UpdateCursor(View, Int32, Int32, Int32, Int32)
已过时.

在其窗口中报告当前光标位置。

UpdateCursorAnchorInfo(View, CursorAnchorInfo)

报告组合字符串中文本插入点和/或字符的位置更改。

UpdateExtractedText(View, Int32, ExtractedText)
UpdateSelection(View, Int32, Int32, Int32, Int32)

报告当前选择范围。

ViewClicked(View)

当用户点击或单击文本视图时通知事件。

Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)

显式接口实现

IJavaPeerable.Disposed()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.Finalized()

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

GetJniTypeName(IJavaPeerable)

中心系统 API 到整个输入法框架 (IMF) 体系结构,用于仲裁应用程序和当前输入法之间的交互。

适用于