블로그 이사했습니다!
👇 블로그 이전 공지 👇
👇 새 블로그에서 글 보기 👇
[Android] 키보드 표시하기, 숨기기 — Win Record (tistory.com)
구현 순서
키보드(입력창) 선언키보드(입력창) 메소드 사용OR커스텀 메소드 만들기
키보드 선언
// activity
private val keyboard: InputMethodManager by lazy {
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
}
// fragment
private val keyboard: InputMethodManager by lazy {
activity?.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
}
메소드 사용
키보드(입력창)를 제어하는데에 주로 3가지의 메소드를 사용한다.
toggleSoftInputshowSoftInputhideSoftInputFromWindow
1. togglgSoftInput(int showFlags, int hideFlages)
현재 상태와 반대로 동작하는 메소드.
키보드가 보이는 상태라면 키보드를 숨기고, 보이지 않는 상태라면 키보드를 표시한다.
showFlags: 표시할 때의 플래그. 0, SHOW_IMPLICIT 또는 SHOW_FORCED
hideFlags: 숨길 때의 플래그. 0, HIDE_IMPLICIT_ONLY 또는 HIDE_NOT_ALWAYS
플래그 종류
SHOW_IMPLICIT (1)암시적인 입력창 표시 요청. 유저의 직접적인 요청이 아니기 때문에 입력창이 표시되지 않을 수 있음.SHOW_FORCED (2)강제적인 입력창 표시 요청. 명시적 요청 전까지는 계속 입력창 보이게 하기.HIDE_IMPLICIT_ONLY (1)유저의 명시적인 표시 요청 없을 경우에만 입력창 숨기기.HIDE_NOT_ALWAYS (2)입력창 숨기기. SHOW_FORCED인 경우에는 동작하지 않음.
keyboard.toggleSoftInput(
InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_IMPLICIT_ONLY
)
keyboard.toggleSoftInput(0, 0)
2. showSoftInput(View view, int flags)
키보드를 표시하는 메소드
view: 글이 입력될 뷰. 해당 뷰에 포커스가 있어야 함. 없다면 동작하지 않음.
flags: 0 또는 SHOW_IMPLICIT
keyboard.showSoftInput(edtInput, 0)
keyboard.showSoftInput(edtInput, InputMethodManager.SHOW_IMPLICIT)
3. hideSoftInputFromWindow(IBinder windowToken, int flags)
키보드를 숨기는 메소드
windowToken: 입력받고 있는 뷰의 토큰 값
flags: 0 또는 HIDE_IMPLICIT_ONLY
// activity
keyboard.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
// fragment
keyboard.hideSoftInputFromWindow(
activity?.currentFocus?.windowToken,
InputMethodManager.HIDE_IMPLICIT_ONLY
)
커스텀 메소드
아래는 간단한 예시이다. SDK 버전이나 기타 이유로 제대로 동작하지 않을 수 있으니 위의 메소드를 활용해 수정할 필요가 있다. 키보드 높이를 활용한 커스텀 메소드가 궁금하다면?
1. showKeyboard()
// #1
fun showKeyboard() {
keyboard.toggleSoftInput(
InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_NOT_ALWAYS
)
}
// #2
fun showKeyboard(view: View) {
view.requestFocus()
keyboard.showSoftInput(view, 0)
}
2. hideKeyboard()
// #1
fun hideKeyboard() {
// fragment인 경우 activity?.currentFocus?.windowToken
keyboard.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
}
// #2
fun hideKeyboard() {
keyboard.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
}
'android > kotlin' 카테고리의 다른 글
[Android][Kotlin] 컨텍스트 메뉴 Context Menu 만들기 (0) | 2021.06.21 |
---|---|
[Android][Kotlin] 하단 다이얼로그 BottomSheetDialog 구현하기 (1) | 2021.06.18 |
[Android][Kotlin] 뷰바인딩 ViewBinding 적용하기 (0) | 2021.06.12 |
[Android][Kotlin] 키보드 높이 이용해 키보드 올리기, 내리기 (0) | 2021.06.09 |
[Android][Kotlin] 네트워크 연결상태 체크하기 (0) | 2021.06.04 |
댓글