Android開発

【Android開発】EditTextの確定検出にしてやられた

EditTextの確定検出

android開発ではおなじみ「EditText

TextWatcherというもので入力を監視することができ、入力確定を検出してあれこれ処理をしたかったが、うまくいきませんでした。。

理由としては、確定検出をしてくれるであろうと思っていた afterTextChanged() DelateEnterを押したときにも検出されたからだ。

自分はTextWatcherを利用して入力の確定(ソフトウェアキーボードの終了)したときに、EditTextに入力された文字列をhtmlタグで挟もうとしていたが、上記の理由で間違った実装をしてしまい大変なことになった。

EditTextの確定検出については調べるとたくさんの人が解決策を紹介してくれていたので、参考にさせていただいて以下のコードで無事解決することができた。

holder!!.editText.addTextChangedListener(object : TextWatcher{
   var currentLength = 0
   var keycodeFlag : Boolean = false
   override fun afterTextChanged(s: Editable?) {
       if (s.toString().length < currentLength  || keycodeFlag) {
           keycodeFlag = false
           return
       }
       var unfixed = false
       val spanned = s!!.getSpans(0, s.length, Any::class.java)

       if (spanned != null) {
           for (obj in spanned) {
               if (obj is android.text.style.UnderlineSpan) {
                   unfixed = true
               }
           }
       }
       if (!unfixed) {
      //確定検出時に行いたい処理はココ           
       }
   }
   override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
       currentLength = s.toString().length
   }
   override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
       if (count == 0) {
           keycodeFlag = true
       }
   }
})

参考:EditText入力終了検知 〜 確定による検知の一部改造|Android開発メモ書き

上記のコードはrecyclerView内のEditTextに対して行っているため、使用していない場合はholderの記述は不要。

 

参考リンク:

Android/EditTextでIMEの未確定文字列が確定された瞬間(のフォーク)

Android - 文字入力の確定検知について

[Android] 入力を監視するTextWatcher

-Android開発

© 2020 ガジェジー