본문 바로가기
안드로이드 코틀린

[Android][kotlin] EditText 외부 탭하여 키보드 내려가게 하기

by teamnova 2023. 10. 23.

앱을 쓰다 보면 editText를 눌러 키보드를 올린 상태에서 외부를 탭 할 경우 키보드가 다시 내려가게 하는 기능이 있는 경험을 해본 적 있을것이다. 

 

기본적으로 안드로이드 EditText 는 이런식으로 동작하지 않는다.

이 처리를 구현하고 싶다면 아래와 같이 메서드를 사용하여 처리할 수 있다.

 

 

fun hideKeyboard() {
    val currentFocusView = currentFocus
    if (currentFocusView != null) {
        val inputManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputManager.hideSoftInputFromWindow(
            currentFocusView.windowToken,
            InputMethodManager.HIDE_NOT_ALWAYS
        )
    }
}

currentFocus 는 현재 포커스를 가지고있는 View 를 나타내는 속성입니다. 

이 속성을 통해 현재 화면에서 사용자가 상호작요중인 View 를 가져올 수 있습니다. 

 

해당 요소가 null 이 아닐경우 windowToken  을 사용하여키보드를 보이지 않도록 하는 함수를 작동합니다.

 

이렇게 만들어진 메서드는

부모 레이아웃에 id 값을 준 뒤 onCreate() 에서 다음과같이 작성해 두시면 됩니다.

 

binding.layout.setOnTouchListener(OnTouchListener { v, event ->
    hideKeyboard()
    false
})

제 경우 바인딩을 이용하고 있지만 결국 layout 값에 터치 리스너를 달아주고 hideKeyboard() 함수를 실행 시켜 주시면 됩니다. 

 

이렇게 하고 앱을 빌드해서 editText를 눌러 키보드를 띄운 뒤, 바깥 부분을 누르면 올라와 있던 키보드가 사라지는 걸 볼 수 있습니다.