〈kotlin〉入力後にキーボードを非表示
Android studioでkotlinを使ってAndroidアプリ作成の勉強中。
EditTextはフォーカスが当たるとキーボードが表示され、
入力後も表示されたままになり、手動で閉じる必要がある。
これを、入力後Enterキーを押すことで自動で閉じるように実装する。
キーボードを非表示にするメソッド
private fun handleKeyEvent(view: View, keyCode: Int): Boolean { if (keyCode == KeyEvent.KEYCODE_ENTER) { val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) return true } return false }
キーボードには入力できるそれぞれのキーに対してキーコードが設定されている。
今回は押されたキーのキーコードがKeyEvent.KEYCODE_ENTERと一致している場合に、
非表示の処理が進むように条件分岐する。
InputMethodManagerはソフトキーボードの表示と非表示を制御するクラスで、
この中のhideSoftInputFromWindowでキーボードを非表示にできる。
hideSoftInputFromWindowはリクエストを行うウィンドウのトークンと、
非表示の設定フラグ(Int型)を引数に持つ。
フラグは通常0で良さそうだが、
InputMethodManager.HIDE_IMPLICIT_ONLY / HIDE_NOT_ALWAYS も指定できそう。
InputMethodManager | Android Developers
EditTextにキーリスナーを設定
override fun onCreate(savedInstanceState: Bundle?) { ... binding.editText.setOnKeyListener { view, keyCode, _ -> handleKeyEvent(view, keyCode) } }
EditTextにはOnKeyListenerインターフェースを渡し、
キーの押下が発生したときにトリガーされる onKey() メソッドを設定する。
onKey() メソッドは ビュー、押されたキーを表すコード、キーイベントの3つを受け取るので、
この中で最初に作ったhandleKeyEvent()メソッドを呼び出してビューとキーコードを渡す。
参考
より洗練されたユーザー エクスペリエンスを作成する | Android デベロッパー | Android Developers
InputMethodManager | Android Developers
View.OnKeyListener | Android Developers