마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

onEidtorAction, onKeyListener 관련 한글 입력 오류

0 추천
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() // 입력된 텍스트가 다시 들어감, 'ㅇㅁ'이 됨

 

왜 한글에서만 이러한 문제가 발생하는지, 그리고 어떠한 것이 원인이 되어 이러한 문제가 발생하는 건지 궁금합니다.

또는 예상해보기로는, 한글 입력시에만 발생하는 경우라 한글이 갖는 특징인 조합형/완성형 등에서 비롯된 문제인 것도 같지만, 어디서 어떻게 테스트해보고 처리할지가 막막합니다.
강동투 (290 포인트) 님이 2015년 8월 7일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...