ソフトウェアキーボードアプリの作成方法についてまとめました.

0.環境

開発環境  Android Studio 1.0

実行環境 Minimum Required SDK 2.2 (テストはNexus7で行っています.)

 

1. プロジェクトの作成

新規プロジェクトを作成します.

Activityは不要なので、Create Activityのチェックは外してください.

 

2.AndroidManifest.xml の修正

Input Method Editor (IME)としてAndroidに認識してもらうServiceを、マニフェストに定義します.

applicationタグ内に以下のタグを追加します.

ポイントは、permissionにBIND_INPUT_METHODを指定している箇所と、actionのandroid.view.InputMethodに応答するようにしている箇所です.

 

このコード内で利用している資源を新規作成します.

作成が必要なのは以下の資源です.

  • android:name に定義した名前のクラスファイル.InputMethodServiceを継承させる
  • res/xml    res > 右クリック > New >Directory から作成
  • res/xml/method.xml   詳細は後ほど記載するので、いったん空のXMLを作成してください
  • string/fifty_keys  ここは作成するアプリにあわせて適当な文字列を定義してください

3. method.xml の作成

res/xmlにmethod.xmlを作成します.

 

今回は日本語のキーボードを作成するため、android:imeSubtypeLocaleをjp_JPにしています.

英語のキーボードであればen_USというように、localeにあわせて適切な値を設定してください.

android:imeSubtypeModeはkeyboardにしています.

4.layoutファイルの作成

キーボードに必要なレイアウトは、1.KeyboardViewのみを含んだキーボード自身のレイアウトと、2.キーを押した時に表示されるプレビュー用のレイアウトの2種類になります.

1.KeyboardViewのみを含んだキーボード自身のレイアウト

作成ファイルは、res/layout/keyboard.xml とします.

このファイルは作成するアプリの種類に応じて変更すべきところはありません.せいぜいidやkeyPreviewLayoutの値を好きな名前に変更するぐらいです.

ポイントは android:layout_alignParentBottomで、これをtrueにすることで画面下に寄ったレイアウトとなります.

2.キーを押した時に表示されるプレビュー用のレイアウト

作成ファイルは、res/layout/preview.xml とします.

背景色やテキストサイズ・スタイルを好みに合わせて修正してください.

 

5.キーボードの配列作成

いよいよメインとなるキーボードの配列(キーのレイアウト)を作成します.
res/xml/fifty_keys.xml

Keyboardのパラメータを簡単に紹介します.

  • keyWidth : キーの横幅です.%pは親の幅に対する割合を表しています.
  • keyHeight : キーの立て幅です.

Key のパラメータを紹介します.

  • codes : キーを押したときに入力される文字の文字コード
  • keyLabel : キーのラベル

上に挙げたサンプルコードの要領で、キーボード配列を定義していきます.

 

6.Serviceクラスの作成

いよいよメイン処理のInputMethodServiceを継承したクラスを実装します.

InputMethodServiceに加えて、OnKeyboardActionListenerを実装してキーボードの入力イベントを拾います.

 

onCreateInputViewの中で各種初期化処理を行いますが、そこで4.で作成したLayoutXMLを読み込んだり、5.で作成したキーボードの配列を設定したりします.

 

続いて、OnKeyboardActionListenerのonKeyでキーボードの入力を拾います.

getCurrentInputConnectionを利用して他のアプリケーションのインプットフィールドに接続します.

ポイントはswitch文です.

Deleteキー(文字列の削除)、Shiftキー(CapsLock制御)、Enterキー(実行・完了イベント)の場合はそれぞれ個別処理を実施します.

それ以外のキーが押された場合は、文字に変換してインプットフィールドに書き出します.

全体のソースはこのようになります.

java/tb.android.fiftykeysboard/FiftyKeys.java

 

Leave a Reply

Your email address will not be published. Required fields are marked *