Android開発のこと

Mozc for Android(オープンソース版Google日本語入力)のキーボードを弄ろう

Amazonのアソシエイトとして、8796.jp管理日誌は適格販売により収入を得ています。

image

なんだか使ってるうちに入力がひどくもっさりしてきても長らく ATOK for Android を使い続けてる理由に、英字入力を QWERTY にした時に最上段に数字が出るっていうのがありまして。

Google 日本語入力ではそれがなくて大変残念に思っていた所存。

せっかくオープンソースになったんだから、いじろう!

ということで、いじるファイルを探そう!

ほい、ここ。

Error 404 (Not Found)!!1

今回は「QWERTY でアルファベットを入力するところに数字の段を増やしたい」ので

kbd_qwerty_abc.xml

だと思ったら大間違い。

これは日本語入力も QWERTY の時に使用されるヤツで今回のターゲットとは違いました。

正解は

kbd_12keys_qwerty_abc.xml

でも「kbd_qwerty_abc_123.xml」の一段目をパクります。<Row>から</Row>でキーボードの1段なので、こんな感じで

  <Row>
    <Key mozc:keyEdgeFlags="left">
      <KeyState>
        <Flick>
          <KeyEntity mozc:sourceId="1"
                     mozc:keyCode="@integer/uchar_digit_one"
                     mozc:keyIcon="@raw/qwerty__keyicon__digit_one">
            <PopUp mozc:popUpIcon="@raw/qwerty__keyicon__digit_one" />
          </KeyEntity>
        </Flick>
      </KeyState>
      <KeyState mozc:metaState="alt">
        <Flick>
          <KeyEntity mozc:sourceId="2"
                     mozc:keyCode="@integer/uchar_grave_accent"
                     mozc:keyIcon="@raw/qwerty__keyicon__grave_accent">
            <PopUp mozc:popUpIcon="@raw/qwerty__keyicon__grave_accent" />
          </KeyEntity>
        </Flick>
      </KeyState>
    </Key>
    <Key>
      <KeyState>
(以下略)

となってるのをパクって「kbd_12keys_qwerty_abc.xml」の qwerty 段の上に持ってきます。ポイントになるのは sourceId ってヤツで、どうやら1から順番に振られていってるようで、以下の sourceId を調節しましょう。

あとはキーボードの高さを 100% としたキーの高さと間の隙間の調節ですね。元々より1段増やすので同じキーの高さでは溢れてしまいます。

元々がこうなってるので

<Keyboard
    xmlns:mozc="http://schemas.android.com/apk/res-auto"
    mozc:keyBackground="qwertyRegular"
    mozc:keyWidth="10%p" mozc:keyHeight="20.5%p"
    mozc:horizontalGap="0.3%p" mozc:verticalGap="4%p"
    mozc:popUpWidth="@dimen/key_preview_height" mozc:popUpHeight="@dimen/key_preview_height"
    mozc:popUpXOffset="0dip" mozc:popUpYOffset="@dimen/mini_keyboard_vertical_correction">
  <Row mozc:rowEdgeFlags="top" mozc:keyHeight="0dip" mozc:verticalGap="4%p" />

mozc:keyHeight と mozc:verticalGap をいい塩梅にしましょう。

今回はそれぞれ17.6%と2%にしました。

<Keyboard
    xmlns:mozc="http://schemas.android.com/apk/res-auto"
    mozc:keyBackground="qwertyRegular"
    mozc:keyWidth="10%p" mozc:keyHeight="17.6%p"
    mozc:horizontalGap="0.3%p" mozc:verticalGap="2%p"
    mozc:popUpWidth="@dimen/key_preview_height" mozc:popUpHeight="@dimen/key_preview_height"
    mozc:popUpXOffset="0dip" mozc:popUpYOffset="@dimen/mini_keyboard_vertical_correction">
  <Row mozc:rowEdgeFlags="top" mozc:keyHeight="0dip" mozc:verticalGap="4%p" />

あとは前回やったようにビルドするだけ。らくちん!

で、このままでは冒頭の画像のようにキーボードが真っ白になってしまいます。

オープンソース版は権利の問題だかで画像が差し替えられて公開されてるそうで…

んじゃぁ、mozc/src/android/resources_oss/res/raw にある大量の pic を差し替えればいいのかと思ったんですが、これ実はビルド時に svg ファイルからコンバートされてて、どうにかして持ってきた画像はビルド時に消されて上書きされてしまいます。

なので、本筋では mozc/src/data/images/android/svg にある大量の svg を編集していく必要があるということのようですが、それはまた別のお話。

Error 404 (Not Found)!!1

image

今回程度の変更ではソースコードを弄る必要もなく、キーボードの定義ファイルを変更するだけだったのでラクチンでした。

なかなか考えて作られているようなので興味のある方は見てみるといいと思います。

 

おまけで、キーボードに文字を入れたらこんな感じになりますよというイメージ画像がこちら。

image

大変よい感じ。

デザイナーの方が svg をセットで提供してくれたら世の中の Mozc for Android ベースで開発しようとしている人々が飛びつくだろうなー

コメント

タイトルとURLをコピーしました