かめのはこ

とあるエンジニアのメモ帳です

キーボードが閉じられるのを検知したい

以前作ったアプリでは
レイアウトのDisplayサイズとViewサイズの差から
ソフトウェアキーボードの表示有無を取得してたんですが

今回SufaceView上で入力操作をしたくて
Dialog上に配置したコントロールを経由して入力を取ろうとしたとき
先のようなキーボード有無の検知がどうもできなくてどうしたものかと

やれるとしたら入力で配置したEditTextのコントロールくらいだろう、と
いろいろしてみた

◆閉じられる契機
・キーボードの完了おしたとき
・バックキーおしたとき
・キーボード以外の領域をおしたとき(4系のみ)

◆2系と4系のバックキーの挙動の違い
(AlertDialogの上にEditTextのっけてる場合)
4系ではバックキーのイベントがAlertDialogまで飛んでくる
2系では飛んでこない


さて

●こうした
EditText extendしたクラスを用意してonKeyPreImeも書き換えて
そんなかにキーボードが閉じられた時の処理書いた。。。もぉこれでいっかぁ


●あとがき
いいのか、これで
閉じられる契機が心配
BluetoothとかのHWキーボードの場合とか考慮してね
IMEのアプリによって挙動かわらんよな。。。たぶん

<検証結果>
●4系
・▽のとき(バックキーなのか?)
EditText.onKeyPreIme
AlertDialog.OnKeyListener:KEYCODE_BACK
・Doneのとき
EditText.OnEditorActionListener:IME_ACTION_DONE
・ダイアログ範囲外
かってに閉じる

●2系
・バックキー
EditText.onKeyPreIme
・完了のとき
EditText.OnEditorActionListener:IME_ACTION_DONE
・ダイアログ範囲外
反応しない