ソフトウェアキーボードの確定検出
Android開発におけるデフォルトのソフトウェアキーボードの確定検出は少し面倒。
前回もその記事を書いてそこにも理由を掲載したが、確定(Enter)検出をしたいのに、afterTextChangedメソッドではDeleteキーを押したときなどでも拾ってしまうからだ。
前回載せた記事での解決策はbeforeTextChanged()、onTextChanged()、afterTextChanged()の3つをうまく使って確定状況でのみ動作するというものだった。
ただ、KeyEventからEnterを検出したほうが絶対簡単だと思ったので今回はそちらで試しうまくいったので以下にソースを示す。
editText.setOnEditorActionListener(object : TextView.OnEditorActionListener{ override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean { if(actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT){ //Enterを押した際に施したい処理 } return false } })
上の方法は確定(Enter)後に、ブラウザに飛ぶなどの処理を施す際によく利用される。
参考:OnEditorActionListener を使って EditText への Enter キー入力やアクション入力をハンドルする
もちろん、ソフトウェアキーボードを表示行う処理に合わせて前回紹介した方法や今回紹介した方法を使い分けるといいと思う。
もう1つ上記の方法を試す前にKeyClickListenerを使ってKEYCODEを取得するという方法も試した。(これもいけた)
editText.setOnKeyListener(object : View.OnKeyListener{ override fun onKey(v: View?, keyCode: Int, event: KeyEvent?): Boolean { if(event!!.action == KeyEvent.ACTION_DOWN && keyCode == KEYCODE_ENTER){ //処理 return true } return false } })
状況に合わせて使い分けてやってくださいな。
#kotlin #SoftwearKeyboard #確定検出