[Kotlin] Fragment 에서 키보드 내리기

Hand·2022년 10월 12일
0

Android

목록 보기
16/17

💡 EditText를 사용할 때, 조금 더 사용자가 편하게 사용하려면 키보드를 숨길 수 있어야 합니다.

겪은 상황

화면 밖을 터치했을 때, 키보드가 내려갈 수 있게 해야겠다 생각을 했습니다.

하지만, fragment에서는 dispatchTouchEvent를 override할 수 없었습니다.

fragment가 아닌 activity에서 처리해준다.

fragment는 activity 위에 올라가 있기 때문에 여기서 처리해줄 필요가 없었습니다.

최상위 activity에서 dispatchTouchEvent를 통해 터치를 감지하면, 키보드가 내려가도록 구현했습니다.

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
	val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
    
	return super.dispatchTouchEvent(ev)
}

이렇게만 해주면, EditText가 아닌 다른 영역을 터치했을 때, 키보드가 내려가게 됩니다.

근데 위의 코드만 작성한다면, 키보드만 내려가지, focus는 그대로 남아있게 됩니다.

그래서 저는 위의 코드에 조금 더 추가해주었습니다.

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
	val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)

	if(currentFocus is EditText) {
		currentFocus!!.clearFocus()
	}
    
	return super.dispatchTouchEvent(ev)
}

이렇게 해주면, focus도 옮길 수 있고, 키보드도 내려가 쾌적하게 사용할 수 있게 됩니다.

profile
화이팅!

1개의 댓글

comment-user-thumbnail
2023년 3월 27일

혹시 해당자료 소스코드가있으실까요

답글 달기