안드로이드 다이얼로그에서 생성된 키보드가 다이얼로드 종료되어도 남아있는 문제

안녕하세요. 개발자 드리머즈입니다.


이 포스트는 다이얼로그 키보드 관련 문제를 발견하여 정리하는 글입니다.


문제 현상

안드로이드 다이얼로그에 EditText를 포함하는 경우 이 다이얼로그가 실행될 때 EditText를 클릭하면 키보드(soft keyboard)가 생깁니다. 이 상태에서 취소 버튼이나 다이얼로그 바깥 공간을 클릭하여 다이얼로그를 사라지게 해도 생성된 키보드가 사라지지 않고 여전히 남아있습니다.



원인

파악중



해결 방법

Dialog 클래스의 onDetach()함수에 아래의 빨간색으로 표시한 코드 2줄을 추가하면 됩니다.

아래의 빨간색 코드는 키보드를 사라지게(내려가게)하는 코드이고 onDetach()함수는 다이얼로그가 사라질 때 불리는 콜백함수입니다.

따라서 onDetach()함수에 키보드를 사라지게하는 빨간색 코드를 추가하면, 다이얼로그가 사라질 때 키보드를 사라지게 됩니다.


1
2
3
4
5
6
7
@Override
public void onDetach() {
    super.onDetach();
 
    InputMethodManager imm = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getActivity().getWindow().getDecorView().getWindowToken(), 0);
}
cs



*그런데 위의 코드를 사용해도 낮은 확률로 키보드가 안사라지는 현상을 발견함.. 에뮬레이터에서만 이런 것인지? 확인이 필요함..

작성자

Posted by 드리머즈

관련 글

댓글 영역