自作IMEによる日本語入力の方法

4,276 views
Skip to first unread message

XEGA

unread,
Feb 18, 2013, 3:12:33 AM2/18/13
to 日本Androidの会
いつもお世話になっています。

現在IMEの開発を始めたのですが、ネット上に情報が少なく、上手く動かすことができていません…。
画面上にボタンを配置し、”sendDownUpKeyEvents(keyEventCode)”によって英単語を入力することはできるのですが、
日本語入力を行うことができない状況です。

KeyEventCodeに日本語が用意されているわけもなく、ネットや書籍にもIMEに関してはほとんど情報がないので、
手詰まりの状況です。

例えば、ボタンを押すと”あ”を入力した場合は、どうすればよいのでしょうか。

是非ご教授お願いします。

Hirokazu Fukami

unread,
Feb 18, 2013, 3:32:10 AM2/18/13
to android-g...@googlegroups.com
こんにちはfkmです。

少々古めの本ですが、
http://www.oreilly.co.jp/books/9784873114569/
で、IMEの作り方を紹介していた節があったと記憶しています。

2013/2/18 XEGA <ysa...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

Hiroaki GOTO as GORRY

unread,
Feb 18, 2013, 3:53:28 AM2/18/13
to android-g...@googlegroups.com

後藤 浩昭(GORRY)です。

InputConnection.sendKeyEvent()についての文書を読んでいるなら、
その近くにInputConnection.commitText()について書いてありませんか?
例として「ソフトウェア技術ドキュメントを勝手に翻訳:入力方式(IME)の作成」を
出しておきます。
http://www.techdoctranslator.com/resources/articles/articles-index/creating-input-method

また、IMEについて総合的に学びたいなら、Androidソースツリーにある
OpenWnnを自分でビルドして動かしてみることをおすすめします。


In message <a99ec880-5294-4a71...@or10g2000pbc.googlegroups.com>
"[android-group-japan: 22040] 自作IMEによる日本語入力の方法"
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>


--
Hiroaki GOTO as "GORRY" : 後藤 浩昭
EMAIL: gorr...@gmail.com

XEGA

unread,
Feb 18, 2013, 5:39:15 AM2/18/13
to android-g...@googlegroups.com
様々な情報ありがとうございます。
参考書等で、特に日本語の入力について解説しているものが他にもあれば、是非教えてください。

日本語入力についての情報を是非お願いします。

2013年2月18日月曜日 17時12分33秒 UTC+9 XEGA:

田代透

unread,
Feb 18, 2013, 6:42:26 AM2/18/13
to android-g...@googlegroups.com
書籍やソースコードを読むべきだと思いますが

そもそもIMEは例えばキーコードとして「aiueo」’と入力された際に「あいうえお」と
変換してアプリケーションに渡すものなので
入力に応じた日本語の文字列を作る出す存在です。

IMEに「あ」と入力されることを期待するのがそもそも間違いだと思います。



2013年2月18日 19:39 XEGA <ysa...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 



--
--
Toru Tashiro
toru...@gmail.com

Shin Miyazaki

unread,
Feb 18, 2013, 7:03:55 AM2/18/13
to android-g...@googlegroups.com
こんばんは、みやざきです。

とりあえず、ソフトキーボードに「あ」というキーを表示し、そこを押すと「あ」と入力される、
というだけのIMなら、Android SDK付属のSoftKeyboardサンプルをいじってみれば
すぐに実現できます。 
こちらでAndroidの最低限のIMの実装の仕方を覚えたら、次は日本語入力全般の機能ということで
後藤さんのあげたOpenWnnを見れば、ということになります。

ただ、IMというのはかなり専門的なソフトウェアとなります。誰にでもわかるな解説を求めるのは無茶です。
OpenWnnも変換エンジン自体はjniで実装されたものなので仕組みを知ろうとすればCの知識も必要となります。
正直、一文字の入力にてこずっているようでは先はかなり厳しいと言わざるを得ません。

2013年2月18日 17:12 XEGA <ysa...@gmail.com>:

河村潔広

unread,
Feb 18, 2013, 9:49:11 AM2/18/13
to android-g...@googlegroups.com
Androidで、IME関連に触れている書籍ってないんですよね。

ただ、「IME--> View との連携」、 「ユーザー操作-->IME」は、調べていくと
かなり単純なシナリオの集まりです。

例えば、「お腹が空いた」と入力したい場合
APIの流れは以下のような感じです。
1. IMEアプリ : フォーカスがあるViewから、InputConnectionを取得する。
2. IMEアプリ : InputConnection#setComposingText("おなかがすいた", 1);
3. Editor : 未確定文字をユーザーに表示
4. IMEアプリ : InputConnection#inputCommitText("お腹が空いた", 1);
5. Editor : 確定文字として、テキストを更新

(ref http://kyorohiro.blogspot.jp/2013/01/kyorotext-8.html)

しかし、いかんせん、ドキュメントがないのです。 なので根気よく、色々ためしていくしかありません。
たぶん、この作業には、スキルの違いはあまり重要ではなく。必要なのは根気だけです。
※ kyorohiro的には、こういった作業は結構好きです。かなりイケテます。楽しいです。

[PS]
Android SDkのサンプルがそこそこ理解できたら、「OpenWnn」の一部だけ改造することをお勧めします。
UIの部分に興味があるならば、UIの部分だけ深く理解すればよい事になるからです。

以外と簡単に、XEGAさんがしたい事を実現できるかも知れません。
ではでは

2013年2月18日 21:03 Shin Miyazaki <shin...@gmail.com>:

Koji Hisano

unread,
Feb 19, 2013, 5:40:23 AM2/19/13
to android-g...@googlegroups.com
カトマックの久納です。

改訂2版ではなく、初版の方のAndroidプログラミング入門の第5部第1章に分かりやすいIME関連の解説があります。
http://www.amazon.co.jp/dp/4048679562

先週リリースしたRemote TestKitの最新版では、上記書籍の解説を元に簡単なIMEを実装して、PCからの日本語入力機能を実現しました。
http://appkitbox.com/testkit/info/2013/02/16/new_feature_20130216

非常に分かりやすい解説でしたのでオススメです。


2013年2月18日月曜日 23時49分11秒 UTC+9 kyorohiro:
>> このグループから退会し、メールの受信を停止するには、android-group-japan+unsubscribe@googlegroups.com
>> にメールを送信します。
>> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。
>> http://groups.google.com/group/android-group-japan?hl=ja
>> からこのグループにアクセスしてください。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>>
>>
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-japan+unsubscribe@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。

XEGA

unread,
Feb 19, 2013, 11:51:56 PM2/19/13
to 日本Androidの会
皆様書籍などの情報ありがとうございます。
書店で探して購入を検討してみます。

現在の状況について、inputCommitText等を用いて日本語入力はなんとか可能になったのですが、
別の箇所で問題が発生してしまいました…。

自作View内のonDrawを用い、Canvasによるボタンの描画を行なっているのですが、アプリの状態ではきちんと描画できるものの、
(一旦アプリとして作成したものをIMEとして移植しています)
IMEとして表示した際に、解像度がかなり低く、ボタンがアプリの2倍以上の大きさで表示されてしまい、更に画面を回転させた際にIMEが完全に落ちて
しまうのです。
普通のボタンを表示させた際には回転させても大丈夫なので、Canvas当たりに問題があるとは思うのですが。

何か心当たりがあれば助言をお願いします…。

Makoto Yamazaki

unread,
Feb 20, 2013, 12:04:40 AM2/20/13
to android-g...@googlegroups.com
zaki です。

> IMEとして表示した際に、解像度がかなり低く、ボタンがアプリの2倍以上の大きさで表示されてしまい、
> 更に画面を回転させた際にIMEが完全に落ちてしまうのです。

情報が少ないのであたってるかはまったくわかりませんが、画面回転で落ちるパターンは
たいてい NullPointerException です。
logcatみてください

XEGA

unread,
Feb 20, 2013, 12:09:32 AM2/20/13
to 日本Androidの会
Logcatを確認した所、落ちる際に出るエラーは1つだけでした。
ロケーションについてのエラーのようです…。

02-20 14:07:12.089: E/
AmazonAppstore.DynamicResources.DeviceLanguage(25969): Locale with
invalid language 'ja' given, defaulting to 'en' PropertyMap:{ Name:Log
RecordType:Log LogLevel:Error device.systemTime:1361336832099
device.sdkVersion:17 device.hardware:grouper
LogTag:DynamicResources.DeviceLanguage device.androidRelease:4.2.1
device.manufacturer:asus device.brand:google device.model:Nexus 7
MessageContents:Locale with invalid language 'ja' given, defaulting to
'en' };

XEGA

unread,
Feb 20, 2013, 9:45:33 PM2/20/13
to 日本Androidの会
onDrawを使用する為にViewを作成し、「setInputView(new MyView(this));」によって表示させようとしています
が、
「canvas.drawPoin」で円を一つのみ表示させるだけのプログラムでも、画面回転時、更には画面の自動回転を有効にしただけでも落ちてしま
います。

解像度の問題は、「android:minSdkVersion」を4以上に設定することで回避することが出来ました。

IMEでCanvasを使用することは無理なのでしょうか…。

田代透

unread,
Feb 21, 2013, 2:04:38 AM2/21/13
to android-g...@googlegroups.com
Logcatは確認されましたか?


2013年2月21日 11:45 XEGA <ysa...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。





--
--
Toru Tashiro
toru...@gmail.com
Reply all
Reply to author
Forward
0 new messages