EditTextってキーボードが隠れないですよね。 普通、以下のような動作に時にはキーボードが自動で隠れてほしいものです。
- エンターを押した - 何ならアクションもしたい
- EditTextからカーソルが外れた
- 画面から離れた
そんな時のために以下のようなクラスを作りました。
クラス
class EditTextHelper(val view: EditText) { init { setOffCursolHideKeyboard() } fun setOnKeyListener(lister: (v: View, keyCode: Int, event: KeyEvent) -> Unit) { view.setOnKeyListener { v, keyCode, event -> lister(v, keyCode, event) if (isEnterAction(keyCode, event)) offCursolHideKeyboard() false } } // キーボードでエンターキー押した時 fun isEnterAction(keyCode: Int, event: KeyEvent): Boolean = (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) // キーボードを閉じる fun offCursolHideKeyboard() { val inputMethodManager: InputMethodManager = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) } // カーソルが外れた時 fun setOffCursolHideKeyboard() { view.setOnFocusChangeListener { v, hasFocus -> if (!hasFocus) offCursolHideKeyboard() } } }
使い方
val editTextHelper = EditTextHelper(R.id.editText) // エンター押した時にアクションを起こしたい場合 editTextHelper.setOnKeyListener { v, keyCode, event -> if (editTextHelper.isEnterAction(keyCode, event)) { Log.d("editTextHelper", "isEnterAction") } false }
これでキーボードが自動で隠れてくれます。