EditText 에 포커스가 된 후 키보드가 올라오는데 바깥 화면을 터치 시에도 키보드를 숨겨주고 싶었다.
windowSoftInputMode 에 stateAlwaysHidden 속성을 추가해준다.
안드로이는 첫번째 EditText에 초기 포커스 자동적으로 할당하거나 Activity에 focusable을 할당하는데 이 속성을 추가하면 초기 포커스 설정이 무시된다.
adjustResize 는 키보드가 올라왔을 때 키보드를 위한 공간을 확보하도록 액티비티의 기본 창 크기를 항상 조절해준다.
<activity
android:name=".menu.main.LoginActivity"
android:screenOrientation="sensorLandscape"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
Activity 의 터치 이벤트를 감지하는 dispatchTouchEvent 메소드를 오버라이드 해준다.
// 화면 터치 시 키보드 내리기
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
val imm: InputMethodManager =
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
return super.dispatchTouchEvent(ev)
}
InputMethodManager 를 이용하여 현재 터치되어 포커스 된 뷰를 가져와서 키보드를 숨겨준다.