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

2022. 10. 23. 04:00·Android
⚠️ 2021.06.06에 작성된 글입니다 ⚠️

 

구현 순서

  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 버전이나 기타 이유로 제대로 동작하지 않을 수 있으니 위의 메소드를 활용해 수정할 필요가 있다. 키보드 높이를 활용한 커스텀 메소드가 궁금하다면? 👉 [Android] 키보드 높이 이용해 키보드 올리기, 내리기

 

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)
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] 뷰바인딩 ViewBinding 적용하기  (0) 2022.10.23
[Android] 키보드 높이 이용해 키보드 올리기, 내리기  (0) 2022.10.23
[Android] Thread - 이미지 바꾸기  (0) 2022.10.23
[Android] Thread - 텍스트 변경하기  (0) 2022.10.23
[Android] Thread - 화면 변경하기(초시계)  (0) 2022.10.22
'Android' 카테고리의 다른 글
  • [Android] 뷰바인딩 ViewBinding 적용하기
  • [Android] 키보드 높이 이용해 키보드 올리기, 내리기
  • [Android] Thread - 이미지 바꾸기
  • [Android] Thread - 텍스트 변경하기
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] 키보드 표시하기, 숨기기
상단으로

티스토리툴바