안드로이드앱/EditText
키보드 관련_Edittext
스텝바이스텝안드로이드
2021. 3. 13. 16:27
해당 화면을 띄웠을 때, 자동으로 포커스를 주고 키보드를 띄우는 java code
editText.requestFocus(); //focus 주기
// 키보드 띄우기
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
반대로 키보드 내리는 java code
InputMethodManager immhide = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
immhide.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
** Fragment에서는 위 코드로 작동이 안 함
//키보드 내리기
val immhide = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
immhide.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
앞에 requireActivity를 추가해줘야함
*** CustomDialog에서
Dismiss 될 때
keyboard를 내려주고 싶은데, 부모의 context를 받아오는게 힘들었다.
따라서, dialog띄울 때 억지로 부모의 context를 받아서 내렸다.
예시 코드
//Custom Dialog 클래스 中
fun start(context: Context){ //억지로 부모의 context 받아옴
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE) //타이틀바 제거
dlg.setContentView(R.layout.dialog_create_messagegroup) //다이얼로그에 사용할 xml 파일을 불러옴
dlg.setCancelable(true) //다이얼로그의 바깥 화면을 눌렀을 때 다이얼로그가 닫히지 않도록 함
...중략...
//dismiss될 때 받아온 context를 활용해서 키보드 내리기!
dlg.setOnDismissListener {
val immhide = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
immhide.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
}
//Dialog를 띄우는 fragment나 activity에서
val dlg = DialogCreateMessageGroup(requireActivity())
...중략...
dlg.start(requireContext()) //요렇게 dialog를 띄울 때 부모의 context를 받아서 넣어주면된다.
위 코드는 fragment라서 requireContext()함수를 사용했고
activty였으면 context나 applicationContext 썼으면 됐을 듯