You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
대댓글 버튼(댓글의 말풍선)을 누르면, 대댓글 달 건지 한번 물어본 다음 확인을 누르면 해당 댓글이 빨간색으로 변합니다.
그리고 editText에 포커스가 가고, 키보드가 올라옵니다.
여기서 상당히 귀찮은 기능이 있는데, 뒤로가기를 누르면 이 빨간색이 해제되고 대댓글 쓰기 모드는 취소됩니다.
빨갛게 만드는 건 쉬운데, 하얗게 되돌리는 부분에 함정이 있었습니다.
키보드가 올라와 있는 상황에서는 사용자가 뒤로가기를 누른 것을 탐지하는 게 어렵다는 문제가 있었습니다.
보통 뒤로가기 버튼을 누르는 이벤트는 액티비티에서 onBackPressed()를 override 해서 탐지하게 되는데, 키보드가 올라와 있는 상황에서 뒤로가기를 누르면 키보드를 내리는데 그 뒤로가기가 소모되어 버리고 onBackPressed()가 작동하지 않습니다.
이는 "이 댓글을 parent로 하겠다" 라고 지정한 것을 취소하지도 못한다는 뜻이라서 문제가 큽니다.
찾아낸 방법은 editText 가 가지고 있는 onKeyPreIme() 함수를 사용하는 것입니다.
editText 를 상속받는 새로운 커스텀 클래스를 만들고, article_activity.xml 의 해당 editText 의 type을 이걸로 바꿉니다.
에타 대댓글 기능에는 이런 귀찮은 디테일이 있습니다.
대댓글 버튼(댓글의 말풍선)을 누르면, 대댓글 달 건지 한번 물어본 다음 확인을 누르면 해당 댓글이 빨간색으로 변합니다.
그리고 editText에 포커스가 가고, 키보드가 올라옵니다.
여기서 상당히 귀찮은 기능이 있는데, 뒤로가기를 누르면 이 빨간색이 해제되고 대댓글 쓰기 모드는 취소됩니다.
빨갛게 만드는 건 쉬운데, 하얗게 되돌리는 부분에 함정이 있었습니다.
키보드가 올라와 있는 상황에서는 사용자가 뒤로가기를 누른 것을 탐지하는 게 어렵다는 문제가 있었습니다.
보통 뒤로가기 버튼을 누르는 이벤트는 액티비티에서 onBackPressed()를 override 해서 탐지하게 되는데, 키보드가 올라와 있는 상황에서 뒤로가기를 누르면 키보드를 내리는데 그 뒤로가기가 소모되어 버리고 onBackPressed()가 작동하지 않습니다.
이는 "이 댓글을 parent로 하겠다" 라고 지정한 것을 취소하지도 못한다는 뜻이라서 문제가 큽니다.
찾아낸 방법은 editText 가 가지고 있는 onKeyPreIme() 함수를 사용하는 것입니다.
editText 를 상속받는 새로운 커스텀 클래스를 만들고, article_activity.xml 의 해당 editText 의 type을 이걸로 바꿉니다.
이렇게 onKeyPreIme()를 override 해주고, "이곳"에서 activity 에게 명령을 전달해 줘야 합니다.
명령 전달은 interface 를 사용합니다. CustomEditText 클래스 내에
와 같이 인터페이스와 함수를 하나 만들어 줍니다. Activity 쪽에도
이렇게 해 주면 평소처럼 키보드도 내려가고, 원하는 작업도 할 수 있게 됩니다.
https://stackoverflow.com/questions/3940127/intercept-back-button-from-soft-keyboard 의 좋아요 84개짜리 답변을 응용한 방법입니다.
유용해 보여서 이슈로 남겨요 (나중에 원리 까먹을까봐...)
The text was updated successfully, but these errors were encountered: