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><<>

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

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

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

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

在大多数情况下,使用标准 android.widget.TextView 或其子类的应用程序几乎不需要处理软输入方法。 需要注意的主要事项包括:

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

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

对于我们编写自己的文本编辑器时很少见的人,需要实现 android.view.View#onCreateInputConnection 才能返回自己的 InputConnection 接口的新实例,使 IME 能够与编辑器交互。

“InputMethods”><h3>Input Methods</h3>

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

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

“Security”><h3>Security</h3>

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

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

<ul><li>

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

<li>

IMF 可能有许多客户端流程,但一次只有一个进程处于活动状态。 非活动客户端无法通过下面所述的机制与 IMF 的关键部分进行交互。

<li>

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

<li>

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

<li>

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

<li>

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

<li>

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

</ul>

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

Java文档android.view.inputmethod.InputMethodManager

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

字段

名称 说明
HandwritingDelegateFlagHomeDelegatorAllowed
已过时.

指示默认主屏幕 (Intent#CATEGORY_HOME) 中的视图可以充当委托编辑器视图的手写委派器。

ShowForced

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

ShowImplicit
已过时.

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

属性

名称 说明
Class

返回此 Object的运行时类。

(继承自 Object)
CurrentInputMethodInfo

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

CurrentInputMethodSubtype

返回当前输入法子类型。

EnabledInputMethodList

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

Handle

基础 Android 实例的句柄。

(继承自 Object)
InputMethodList

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

IsAcceptingText

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

IsActive

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

IsConnectionlessStylusHandwritingAvailable

true如果当前选定的 IME 支持无连接触笔手写会话,并且已启用,则返回。

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, String, HandwritingDelegateFlag, IExecutor, IConsumer)

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

AcceptStylusHandwritingDelegation(View, String, IExecutor, IConsumer)

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

AcceptStylusHandwritingDelegation(View, String)

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

AcceptStylusHandwritingDelegation(View)

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

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, ResultReceiver)

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

HideSoftInputFromWindow(IBinder, HideSoftInputFlags)

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

HideStatusIcon(IBinder)

此成员已弃用。

InvalidateInput(View)

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

InvokeIsActive(View)

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

IsWatchingCursor(View)
已过时.

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

JavaFinalize()

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

(继承自 Object)
Notify()

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

(继承自 Object)
NotifyAll()

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

(继承自 Object)
PrepareStylusHandwritingDelegation(View, String)

准备在与检测到初始手写笔画的视图不同的包中的相同窗口或不同窗口中启动触笔手写会话的委托。

PrepareStylusHandwritingDelegation(View)

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

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, ResultReceiver)

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

ShowSoftInput(View, ShowFlags)

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

ShowSoftInputFromInputMethod(IBinder, ShowFlags)

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

ShowStatusIcon(IBinder, String, Int32)

此成员已弃用。

StartConnectionlessStylusHandwriting(View, CursorAnchorInfo, IExecutor, IConnectionlessHandwritingCallback)

启动无连接触笔手写会话。

StartConnectionlessStylusHandwritingForDelegation(View, CursorAnchorInfo, IExecutor, IConnectionlessHandwritingCallback)

启动无连接触笔手写会话(见 #startConnectionlessStylusHandwriting),并启用识别的手写文本稍后使用 #acceptStylusHandwritingDelegation(View)的文本编辑器提交。

StartConnectionlessStylusHandwritingForDelegation(View, CursorAnchorInfo, String, IExecutor, IConnectionlessHandwritingCallback)

启动无连接触笔手写会话(见 #startConnectionlessStylusHandwriting),并启用识别的手写文本稍后使用 #acceptStylusHandwritingDelegation(View, String)的文本编辑器提交。

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, Int32)

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

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <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)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于