💡 EditText를 사용할 때, 조금 더 사용자가 편하게 사용하려면 키보드를 숨길 수 있어야 합니다.
화면 밖을 터치했을 때, 키보드가 내려갈 수 있게 해야겠다 생각을 했습니다.
하지만, fragment에서는 dispatchTouchEvent를 override할 수 없었습니다.
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도 옮길 수 있고, 키보드도 내려가 쾌적하게 사용할 수 있게 됩니다.
혹시 해당자료 소스코드가있으실까요