PCやスマートデバイスなどにはIME(Input Method Editor)がついています。Androidで代表的なIMEアプリにはGoogle日本語入力などがあります。Androidでは、このIMEをカスタマイズできるAPIが付属されており、キーボードを自由に開発することができるようになっています。今回はそのAPIを利用して独自にIMEを開発・カスタマイズしてみましょう。最終的な目標は、全く実用性がありませんが(笑)、寿司ネタの単語を入力できるようなIMEを開発することです。なお、今回はIMEのデバッグをしやすくするためにメモ帳アプリのColorNoteを事前に開発端末にインストールしています。
今回開発する寿司ネタIME。全く実用性はない。

今回開発する寿司ネタIME。全く実用性はない。



IMEのライフサイクル

Activityと同様に、IMEにもライフサイクルが存在します。IMEのライフサイクルは、以下の図のようになっています。

IMEのライフサイクル(画像はAndroid Developersより引用)。

IMEのライフサイクル(画像はAndroid Developersより引用)。

onCreateメソッドにてIMEが生成され、onCreateInputViewメソッドにて、キーボードのViewを生成します。他には、入力候補を表示する際に利用されるonCreateCandidatesViewメソッド、入力方式を変更する際に呼び出されるonCurrentInputMethodSubtypeChangedなどがあります。IMEのライフサイクルも、Activityのライフサイクルと同様に、最終的にはonDestroyで終了されます。

マニフェストへの記述

IMEのライフサイクルが理解できたら、さっそく開発に入って行きましょう。IMEを利用する際には、IMEをServiceとしてAndroidManifest.xmlに記述する必要があります。以下に例を示します。

AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<!-- インプットメソッドの宣言(必須) -->
<service
android:name="InputIME"
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>

<!-- IMEの設定のためのアクティビティ(任意) -->
<activity
android:name="ImePreferences"
android:label="@string/action_settings" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>

</application>
applicationタグ以下にserviceタグを導入します。nameはInputIMEとなっていますが、ここは後ほど実装するクラスであるInputMethodServiceを継承したクラス名にしてください。また、任意でIMEの設定を編集するためのactivityも追加します。