AutoCompleteTextView 을 상속받은 커스텀뷰를 개발하고 있습니다. AutoCompleteTextView 안에서 텍스트 입력 후 물리키보드로 ENTER 혹은 가상키보드(IME) ACTION_DONE 일 때 입력된 텍스트를 다른 텍스트로 변환 처리하는 구조를 가지고 있습니다. 다시 말하자면 입력된 텍스트에 spannable 를 입히고 있습니다. 입력이 'ㅁ' 이고, 이때 ENTER를 누르면, 'ㅁ' 에 spannable 이 입혀져 'ㅇ' 된다고 보면 됩니다. (이 과정에는 입력된 텍스트를 가져와 텍스트를 변형하고, 이후에 spnnable을 입히고, 원래의 입력된 텍스트의 위치에 replace() 를 하고있습니다)
이때 문제가 영어 입력시에는 정상적으로 작동하는데, 한글 입력시에는 문제가 발생합니다. 영어로는 정상적으로 'a' -> ENTER -> 'b' 가 되는 반면, 한글로는 'ㅁ' -> ENTER -> 'ㅇ' 처럼 가끔 정상적으로 작동하지만 대부분 'ㅁ' -> ENTER -> 'ㅇㅁ' 처럼 'ㅁ' 다시 한번 복사 됩니다.
정상적인 메소드 호출 순서는 대략 다음과 같습니다.
1. TextWatcher.afterTextChanged() // 'ㅁ' 입력
2. onEditorAction() // 'ENTER' 입력 감지
3. //.. 변환처리 spannable 텍스트 구성 등 .. 'ㅇ'를 생성
4. replace(start, end, text) // spnnable로 변환된 텍스트로 입력된 텍스트를 대체함, 'ㅁ' 을 'ㅇ'으로
5. TextWatcher.afterTextChanged() // replace 메소드로 인한 텍스트 입력 감지, 'ㅇ' 을 가짐
오류가 발생했을 때의 메소드 호출 순서는 다음과 같습니다.
1~5 는 정상적인 메소드 호출 순서와 동일
6. TextWatcher.afterTextChanged() // 입력된 텍스트가 다시 들어감, 'ㅇㅁ'이 됨
왜 한글에서만 이러한 문제가 발생하는지, 그리고 어떠한 것이 원인이 되어 이러한 문제가 발생하는 건지 궁금합니다.
또는 예상해보기로는, 한글 입력시에만 발생하는 경우라 한글이 갖는 특징인 조합형/완성형 등에서 비롯된 문제인 것도 같지만, 어디서 어떻게 테스트해보고 처리할지가 막막합니다.