输入法编辑器(IME)是一个便于用户输入文本的控件。Android提供了一个可扩展的输入法框架,允许应用程序提供可替代的输入法,比如屏幕上的键盘或者语音输入。在安装输入法后,用户可以通过系统选项选择想要使用的输入法。
想要添加一个输入法,你需要创建一个Android应用并包含一个继承自InputMethodService的类。此外,同城创建一个设置页面来承载输入发的各个选项。你可以自行定义一个设置的UI。
下面讲述以下几个内容:
输入法的生命周期
在应用的清单文件中定义输入法组件
输入法相关接口
设计一个款输入法的UI
发送文本到应用
输入法子类型的使用
一、输入法的生命周期
输入法的生命周期如下图所示:
20170206170754535.png
二、在清单文件中定义输入法组件
在Android系统中,IME是一个包含特殊IME服务的应用程序。应用的清单文件必须声明输入法服务,请求必须的权限,提供一个intent filter来匹配 action.view.InputMethod,并提供定义了IME特征的元数据(metadata)。此外,可以定义一个设置页面来提供用户修改IME配置的接口,它可以被系统设置所启动。
下面的代码片段声明了一个IME服务。请求了 BIND_INPUT_METHOD 权限来允许服务连接到系统的IME,建立intent filter和metadata:
android:label="@string/fast_input_label"
android:permission="android.permission.BIND_INPUT_METHOD">
android:resource="@xml/method" />
下面的代码片段声明了IME的设置页面,它拥有 ACTION_MAIN 的intent filter来表示它是IME程序的主入口
android:label="@string/fast_input_settings">
也可以从IME的UI提供直接进入设置的入口。
三、输入法API
与IME相关的类在 android.inputmethodservice 和 android.view.inputmethod 包中。KeyEvent 类对于处理键盘特征至关重要。
IME的核心部分是一个服务组件,即一个继承自InputMethodService的类。此外为了实现一般服务的生命周期,这个类提供了IME的UI,处理用户输入和传输文本到指定区域以及当前焦点的回调。InputMethodService类提供了绝大多数管理IME状态和与当前输入区域交互的实现。
下面几个类也很重要。
BaseInputConnection
定义了输入法和应用之间接收输入的交互通道。使用它来读取光标周围的文本,提交文本到输入框以及发送键盘事件给应用。应用应该集成此类。
KeyboardView
一个View的扩展,描绘了一个键盘和用户输入事件的响应。键盘的布局是被Keyboard的实例指定,可以定义一个XML文件。
<