728x90
앱을 쓰다 보면 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를 눌러 키보드를 띄운 뒤, 바깥 부분을 누르면 올라와 있던 키보드가 사라지는 걸 볼 수 있습니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 카메라 기능 이용해서 이미지 받아오기 (0) | 2023.12.02 |
---|---|
[Android/Kotlin] 외부 화면 터치 시 키보드 숨기기 (0) | 2023.11.03 |
[Android][kotlin] youtubePlayer 라이브러리 를 이용해 유튜브영상 표시해 주기 (2) | 2023.10.01 |
[Kotlin][Android]Gson 이용해서 Json 데이터 다루기 (0) | 2023.09.11 |
[Kotlin][Android] ActivityResultAPI 사용해서 액티비티 간 데이터 주고 받기 (2) | 2023.08.30 |