「こんな入力方法があれば、快適なんじゃないだろうか」と思いつきまして。
とりあえず、思いついた入力方法は完成したときに披露するとして、まずは動くものを作ろうと。
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端末にインストールしてみると…。
こんな感じでIMEとして認識されました!(Imeが僕が作ったIMEです)
IME開発の第一歩ですよ。
変換候補をどうやって拾ってきたら良いかなど、よくわからん部分がまだまだありますが、とりあえず、IMEは作り始めることができました。
がんばって新しいIMEを作りたいと思います。
↓に現時点のソースコードを置いておきます。
かなり最低限のことしかやっていないので、これからIME作成に取りかかる人にはわかりやすいかと思います。
(足りない部分がたくさんあると思いますがそこは知らね)
Ime.zip
以上です。