본문 바로가기
Android/디버깅

[Android] AlertDialog에서 showSoftInput 동작 안할 때

by 붕어사랑 티스토리 2022. 6. 23.
반응형

커스텀 레이아웃으로 Dialog를 만들고 그 안에 EditText를 넣은뒤 다이얼러그를 띄우면 바로 키보드가 뜨도록 하는 작업을 하게 되었다.

 

헌데 키보드가 올라오지 않는다...

구글에 검색해보니 나와 같이 AlertDialog로 커스텀 레이아웃을 쓰는 사람들 모두 똑같은 문제를 겪고 있었다.

 

하루종일 찾아보니 AlertDialog의 Window관련 Flag들이 문제를 일으키는게 원인이라 하던데... 대충 만져보니 showSoftInput 함수가 동작하였다. 단 Forced로 설정해야지만 동작한다.

 

Forced로 하면 키보드 입력이 끝나도 키보드가 내려가지를 않음 ㅠㅠ...

 

어떤 flag를 만져야 할지 전혀 감이 안잡혀서 결국 생고생 하다가 나만의 workaround를 찾아 내었다.

 

 

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) mMode.getSCInf().getActCtx().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
editText.setOnFocusChangeListener((v, hasFocus) -> {
    if(!hasFocus){
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
    }
});

 

toggleSoftInput으로 키보드 띄우는건 많이 올라오는 해결법이지만 문제는 입력이 끝나도 키보드가 남아있다.

헌데 키보드 입력을 마치면 focus가 해제된다. 이를 이용해서 강제로 hide하도록 하였다.

 

 

반응형

댓글