Androidのアプリ開発関連のブログ

キーボード表示状態の変更

制作中のSSHクライアントで、キーボード表示状態の変更による画面リサイズ時の処理をつけるために、
メニューからキーボード状態の変更する機能を付けた。

メニューはキボード表示状態で変化するチェックボックスにしようと思ったのだが、
キーボードの表示状態を判別する機能は存在しない模様・・・
InputMethodManager.isActive() で判別できるかと思ったが、入力受付中?は常時trueになっちゃうぽい。
しかたないので、チェックボックスはナシにして、メニュー項目を選択したら状態を切り替える仕様にした。

InputMethodManager.toggleSoftInput(0,0);
でtoggleSoftInputに0を渡すと状況に応じた切り替えになる。
パラメータは表示条件と隠れる条件のフラグだが、指定すれば強制表示にすることもできる。

showSoftInput() というメソッドもあるが、こちらは引数にViewを渡す必要がある。
今回の場合はViewではなくActivityで入力監視をしているので toggleSoftInput() の方にした。


AndroidManifest.xml の <activity> にandroid:windowSoftInputMode属性をつければ起動時にキーボードを表示させることができるが、
"stateAlwaysVisible|adjustResize"としていたが、stateAlwaysVisibleでもユーザー操作で消せちゃうので、"stateVisible|adjustResize"に変更した。
stateVisibleでも問題なく表示されてる。
adjustResizeは表示状態変更時にViewのサイズが調整される。

キーボード表示状態の変更によるViewサイズの変更検知は、
View.addOnLayoutChangeListener()
でできる。
ので、これで状態変更を検知してSSH鯖にサイズ変更コマンドを送るようにした。

サイズ変更コマンドを送った場合は、特別な応答はなく、VIMの場合は画面が消去されて0行目から再度送られてきた。
スクロール範囲が変更になるが、サイズ変更コマンドを送った時に応答無しでこっちで勝手にやる必要があるぽい。