キーボードのレイアウトを作成する

続いて、キーボードのレイアウトをxmlファイルで設定します。resディレクトリ以下にxmlというディレクトリを作成し、そこにmykeyboard.xmlというファイル名でレイアウトファイルを作成します。

mykeyboard.xml
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="10%p"
android:horizontalGap="0px"
android:verticalGap="0px"
android:keyHeight="@dimen/key_height"
>

<Row>
<Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
<Key android:codes="10000" android:keyLabel="まぐろ" android:keyWidth="15%p"/>
<Key android:codes="10001" android:keyLabel="漬けまぐろ" android:keyWidth="22%p"/>
<Key android:codes="10002" android:keyLabel="ビントロ" android:keyWidth="20%p"/>
<Key android:codes="10003" android:keyLabel="真だい" android:keyWidth="15%p"/>
<Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete"
android:keyWidth="15%p" android:keyEdgeFlags="right"
android:isRepeatable="true"/>
</Row>

<Row>
<Key android:codes="10004" android:keyLabel="はまち" android:keyWidth="15%p" android:keyEdgeFlags="left" android:horizontalGap="5%p" />
<Key android:codes="10005" android:keyLabel="真いわし" android:keyWidth="20%p"/>
<Key android:codes="10006" android:keyLabel="サーモン" android:keyWidth="20%p"/>
<Key android:codes="10007" android:keyLabel="そでいか" android:keyWidth="20%p" android:keyEdgeFlags="right"/>
</Row>

</Keyboard>
android:keyLabelはキーボード上に表示される文字列です。また、android:codesはキーコードの数字を表します。今回は大きく分けて2種類のキーを作ります。1つは通常のキーです。先頭のKeyタグが該当します。このキーは単純にIMEがどのように動くのかということを確認するために実装していおり、aというキーを表しています。aのキーコードは97なのでandroid:codesは97となります。

もう1つは寿司ネタのキーです。ここでは、キーコードが割り当てられていない数字を利用しています。

寿司ネタのキーコードを実装する

次に、寿司ネタのキーコードを指定するクラスを実装します。これは単純に先ほどmykeyboard.xmlで指定したキーコードを羅列しているだけです。

SushiCode.java
public class SushiCode {
public static final int MAGURO = 10000;
public static final int DUKE_MAGURO = 10001;
public static final int BINTORO = 10002;
public static final int MADAI = 10003;
public static final int HAMACHI = 10004;
public static final int MAIWASHI = 10005;
public static final int SALMON = 10006;
public static final int SODEIKA = 10007;
}