2010年09月17日

[Android] IMEのサンプル

IMEを作り始めました。
「こんな入力方法があれば、快適なんじゃないだろうか」と思いつきまして。
とりあえず、思いついた入力方法は完成したときに披露するとして、まずは動くものを作ろうと。

Androidはサンプルが豊富にあるのが良いですね。
参考にさせてもらったのは↓こちら。
英語が読めれば本家のサイトでも良かったのですけど…。

http://www.techdoctranslator.com/resources/articles/articles-index/creating-input-method

あとはSDKにサンプルとして付属している「softkey」を参考にしています。


まず、IMEを実装するにはInputMethodServiceを継承したクラスが必要なようです。
もちろんManifest.xmlにserviceタグの記述が必要です。
serviceタグの中に必要な記述は以下のとおり。

<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data android:name="android.view.im" android:resource="@xml/method" />

まだ作り始めたばかりでよくわかっていませんが、intent-filterはIMEとして呼び出されるために必要なものでしょう。
meta-dataはどうも動きからすると、AndroidがIMEとして認識するために必要なようです。
参照している@xml/methodは、softkeyサンプルと同じ内容のxmlを作って参照しています。
xml/method.xmlの中身は↓こんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android" />

このServiceでは以下のイベントが発生します。

1. void onCreate()
2. View onCreateInputView()
3. View onCreateCandidatesView()
4. void onStartInputView(EditorInfo info, boolean restarting)
5. void onFinishInput()
6. void onDestroy()

参考にさせてもらったページによると、IMEのライフサイクルになっているらしいです。
このうち、ソフトウェアキーボード部分を表示するためには、2と3が重要そうです。
2は「入力ビュー」を返します。
既存のIMEで言えばQWERTY配列のキーが表示される部分です。
3は「候補ビュー」を返します。
変換候補を表示する部分のようです。こちらはnullを返しても良いようです。

ということで、2でButtonを1つ返すようにしてみました。
ButtonのonClickListenerでは、押されたら「TEST」とキーイベントを発行するようにしてあります。
この状態で、Android端末にインストールしてみると…。

select_input.png my_ime.png

こんな感じでIMEとして認識されました!(Imeが僕が作ったIMEです)
IME開発の第一歩ですよ。
変換候補をどうやって拾ってきたら良いかなど、よくわからん部分がまだまだありますが、とりあえず、IMEは作り始めることができました。
がんばって新しいIMEを作りたいと思います。

↓に現時点のソースコードを置いておきます。
かなり最低限のことしかやっていないので、これからIME作成に取りかかる人にはわかりやすいかと思います。
(足りない部分がたくさんあると思いますがそこは知らね)
Ime.zip

以上です。
posted by t2low at 08:20| Android