본문 바로가기
android/kotlin

[Android][Kotlin] 키보드 표시하기, 숨기기

by 윈 Win 2021. 6. 6.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Android] 키보드 표시하기, 숨기기 — Win Record (tistory.com)

 

[Android] 키보드 표시하기, 숨기기

⚠️ 2021.06.06에 작성된 글입니다 ⚠️ 구현 순서 키보드(입력창) 선언 키보드(입력창) 메소드 사용  OR 커스텀 메소드 만들기 키보드 선언 // activity private val keyboard: InputMethodManager by lazy { g..

win-record.tistory.com

 

 


 

구현 순서

  1. 키보드(입력창) 선언
  2. 키보드(입력창) 메소드 사용
                 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가지의 메소드를 사용한다.

  • toggleSoftInput
  • showSoftInput
  • hideSoftInputFromWindow

 

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)
}

 

댓글