EditText上で日本語入力中(確定前)のキーイベント取得

3,063 views
Skip to first unread message

Rui

unread,
Feb 4, 2011, 5:42:11 AM2/4/11
to 日本Androidの会
はじめまして。Androidアプリ開発に関しては初心者で、イベントのハンドルにはまっております。ご教授いただければ、幸いです。

しようとしていることは、アプリ上で日本語入力をし、入力途中にどのキーが押されたのかを記録していきたいです。
これを実現するためには、EditTextで日本語を入力しながら、onKeyDownを取得すればいいんだと、簡単に考えていました。

しかし、実装してみると、入力した文字列を確定したあとにEnterキー(KEYCODE_ENTER)やDelキー(KEYCODE_DEL:)など
を押したときはイベントが発行されますが、普通にKEYCODE_AやKEYCODE_1を押しても(未確定文字が入った状態)、キーイベントが発行さ
れません。どのようにすれば、未確定入力文字がある状態で、キーイベントを取得できるでしょうか。

実現したいシナリオ:
1. 日本語IMEはOnにしておく
2. EditTextがはりつけてあるアプリをひらく
3. EditText上で"a"のキーを押す(EditTextには、未確定の状態で「あ」と入力されている)
4. aが押されたことを検知する

sys1yagi

unread,
Feb 4, 2011, 10:47:59 AM2/4/11
to android-g...@googlegroups.com
こんにちは。
八木です。

調べてみると、以下に情報がありました。
http://stackoverflow.com/questions/2461533/how-to-use-onkeyboardactionlistener

内容を要約すると
・OnKeyboardActionListenerはソフトキーボードの実装の際使うもので、一般アプリでは使えない
・onKeyEvent()はハードキーボードのイベントしか拾えない
・ハード、ソフト両方のイベントを拾うにはEditText#addTextChangedListener()でTextWatcherの実装を使え
という感じです。

実際TextWatcherの場合入力中にも各種イベントが飛んできます、が
引数はCharSequenceなどなので、KeyCodeは拾えません。
入力前の文字列、入力後の文字列という形で飛んできます。
aを入力すると日本語入力の場合"あ"が飛んでくるという具合です。

2011年2月4日19:42 Rui <kae...@gmail.com>:

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

Rui

unread,
Feb 6, 2011, 5:54:11 AM2/6/11
to 日本Androidの会
八木様、返信ありがとうございます。

リンクを張ってくださったサイトも読みました。私の実現しようとしていることは一筋縄ではいかないようですね。
とりあえず、ハードキーボードのイベントだけでも拾えればうれしいのですが、日本語入力中(未確定文字がある状態)では、ハードキーボードを押しても、
OnKeyDown/OnKeyUpなどのイベントは発行されていないようなんです。ハードキーボードのみの対応でよければ、できる方法があるでしょう
か。

gif m

unread,
Feb 12, 2011, 10:56:32 AM2/12/11
to android-g...@googlegroups.com

八木さんが回答しているaddtTextChangedListenerでハードキーのイベントを拾えるのではないでしょうか?

2011/02/06 19:54 "Rui" <kae...@gmail.com>:


--

このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。

このグループに投稿するには、android-g...@googlegroups.com...

garlicG

unread,
Feb 14, 2011, 2:55:25 AM2/14/11
to 日本Androidの会
こんにちは。garlicGです。

Activity#dispatchKeyEventはどうでしょうか。
KeyEventクラスの定数値が返ってきます。

実機はないのでわかりませんが、エミュでは動作を確認できると思います。

     @Override
public boolean dispatchKeyEvent (KeyEvent event){
logV("KeyAction:" + event.getAction());
     logV("keyCode:" + event.getKeyCode());
return super.dispatchKeyEvent(event);
}

pie

unread,
Feb 15, 2011, 3:07:47 AM2/15/11
to 日本Androidの会
こんにちはpicpieです

アプリケーションの機能として実装したいのではなく
何かの測定をしたいということでしたら、
最後の手段はIMEを作ってその中で記録する手ですね。
これは確実に取れます。(当たり前か)

サンプルのsoftkeyboardに手を入れると測定用のIMEは
案外簡単に作れんじゃてないかと思います。
Reply all
Reply to author
Forward
0 new messages