原文来自Android Developer Guide,本文为原文翻译,如有错误,欢迎指出。
输入法(IME:Input method editor)是一个能够让用户输入文本的工具。Android提供了一个可扩展的输入法框架,允许应用为用户提供不同的输入法,比如触屏键盘甚至语音输入。只要安装,用户就可以从系统设置中选择自己喜欢使用的输入法,并且在整个系统环境中使用;在同一时刻,只有一种输入法可以使用。
要在Android系统中创建一个输入法,你创建的应用需要包含继承自InputMethodService
的类。此外,通常还要创建一个”settings”的activity,用来向IME服务传递参数选项。你也可以自定义设置界面,把它作为系统设置的一部分。
本文包括以下内容:
- 输入法的生命周期
- 在application manifest中声明IME组件
- 输入法 API
- 设计输入法的用户界面
- 从输入法向应用程序发送文本
- 创建不同类型的输入法
如果你之前没有做过输入法的相关东西,你应该先阅读这篇介绍性的文章Onscreen Input Methods。此外,SDK中包含的Soft Keyboard sample app项目里面有样例代码,你可以修改它们,然后开始创建自己的输入法。
输入法的生命周期
下图描述了一个输入法的生命周期:
Android输入法生命周期
接下来的部分描述了如何实现遵循这一生命周期,实现输入法代码和界面。
在application manifest中声明IME组件
在Android系统中,输入法是一个包含指定的IME服务的Android应用,应用的mainifest文件必须声明此服务,请求所需的权限,提供和action.view.InputMethod
匹配的intent filter
,并且提供包含输入法一些参数的元数据。此外,若想提供一个允许用户修改输入法行为的设置界面,你要定义一个能从系统设置中启动的settings
activity。
下面的代码声明了一个输入法的service.它请求了BIND_INPUT_METHOD
权限,来允许服务把IME和系统关联起来,创建一个intent filter
来匹配android.view.InputMethod
,并且定义了输入法的元数据。
<!-- Declares the input method service -->
<service android:name="FastInputIME"
android:label="@string/fast_input_label"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data android:name="android.view.im" android:resource="@xml/method" />
</service>
下一个代码片段声明了输入法的设置activity.它包含了一个ACTION_MAIN
的intent filter
,表示此activity作为整个输入法应用的入口。
<!-- Optional: an activity for controlling the IME settings -->
<activity android:name="FastInputIMESettings"
android:label="@string/fast_input_settings">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
你也可以在输入法界面中直接提供用户设置。