Module droid_wrap::android::view::inputmethod

source ·
Expand description

视图和输入法(如软键盘)之间交互的框架类。

Structs§

  • EditorInfo 描述了输入法正在与之通信的文本编辑对象(通常是 EditText)的几个属性,最重要的是它包含的文本内容类型和当前光标位置。
  • 总体输入法框架 (IMF) 架构的中央系统 API,用于仲裁应用程序与当前输入法之间的交互。此处涵盖的主题:架构概述 应用程序 输入法 安全性架构概述输入法框架 (IMF) 架构涉及三个主要方面:此类表示的输入法管理器是系统管理所有其他部分之间交互的中心点。它在此处表示为客户端 API,存在于每个应用程序上下文中,并与管理所有进程之间交互的全局系统服务进行通信。输入法 (IME) 实现一种特定的交互模型,允许用户生成文本。系统绑定到当前正在使用的输入法,从而创建并运行它,并告诉它何时隐藏和显示其 UI。一次只有一个 IME 在运行。多个客户端应用程序与输入法管理器仲裁输入焦点并控制 IME 的状态。一次只有一个这样的客户端处于活动状态(使用 IME)。应用程序在大多数情况下,使用标准 android.widget.TextView 或其子类的应用程序几乎不需要做任何事情就可以很好地与软输入法配合使用。您需要注意的主要事项是:正确设置可编辑文本视图中的 android.R.attr.inputType,以便输入法具有足够的上下文来帮助用户在其中输入文本。在显示输入法时妥善处理丢失的屏幕空间。理想情况下,应用程序应该处理其窗口被调整得更小的情况,但它可以依赖系统在需要时执行窗口平移。您应该在活动上设置 android.R.attr.windowSoftInputMode 属性或在您创建的窗口上设置相应的值,以帮助系统确定是平移还是调整大小(它会尝试自动确定,但可能会出错)。您还可以使用相同的 android.R.attr.windowSoftInputMode 属性控制窗口的首选软输入状态(打开、关闭等)。通过此处的 API 可实现更细粒度的控制,以便直接与 IMF 及其 IME 交互 - 显示或隐藏输入区域、让用户选择输入法等。对于我们当中少数编写自己的文本编辑器的人来说,您需要实现 View.onCreateInputConnection 以返回您自己的 InputConnection 接口的新实例,从而允许 IME 与您的编辑器交互。输入法输入法 (IME) 实现为 android.app.Service,通常从 InputMethodService 派生。它必须提供核心 InputMethod 接口,尽管这通常由 InputMethodService 处理,并且实现者只需要处理那里的高级 API。有关实现 IME 的更多信息,请参阅 InputMethodService 类。安全性输入法存在许多安全问题,因为它们本质上可以自由地完全驱动 UI 并监视用户输入的所有内容。Android 输入法框架还允许任意第三方 IME,因此必须小心限制它们的选择和交互。以下是有关 IMF 背后的安全架构的一些要点:仅允许系统通过 Manifest.permission.BIND_INPUT_METHOD 权限直接访问 IME 的 InputMethod 接口。通过不绑定到不需要此权限的输入法服务,系统强制执行此操作,因此系统可以保证没有其他不受信任的客户端在其控制之外访问当前输入法。 IMF 可能有许多客户端进程,但一次只能有一个处于活动状态。非活动客户端无法通过下面描述的机制与 IMF 的关键部分进行交互。输入法的客户端仅被授予访问其 InputMethodSession 接口的权限。为每个客户端创建此接口的一个实例,并且当前 IME 只会处理来自与活动客户端关联的会话的调用。对于普通 IME,此操作由 android.inputmethodservice.AbstractInputMethodService 强制执行,但必须由自定义原始 InputMethodSession 实现的 IME 明确处理。只有活动客户端的 InputConnection 才会接受操作。 IMF 会告知每个客户端进程是否处于活动状态,并且框架会强制在非活动进程中忽略对当前 InputConnection 的调用。这可确保当前 IME 只能向用户认为处于焦点的 UI 传递事件和文本编辑。 IME 在屏幕关闭时永远无法与 InputConnection 交互。这是通过在屏幕关闭时使所有客户端处于非活动状态来强制执行的,并防止恶意 IME 在用户无法意识到其行为时驱动 UI。客户端应用程序可以要求系统让用户选择新的 IME,但不能以编程方式自行切换到新 IME。这可避免恶意应用程序将用户切换到自己的 IME,当用户导航到另一个应用程序时,该 IME 仍保持运行。另一方面,IME 被允许以编程方式将系统切换到另一个 IME,因为它已经完全控制了用户输入。用户必须先在设置中明确启用新 IME,然后才能切换到新 IME,以向系统确认他们知道该 IME 并希望将其启用。如果您的应用以 Android 11(API 级别 30)或更高版本为目标,则此类中的方法均会根据软件包可见性规则返回过滤结果,当前连接的 IME 除外。具有 InputMethod.SERVICE_INTERFACE 查询的应用会查看所有 IME。

Functions§

  • 测试android.view.inputmethod