안드로이드 앱 개발

키보드 관련_Edittext 본문

안드로이드앱/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 썼으면 됐을 듯