⚠️ 2021.06.06에 작성된 글입니다 ⚠️
구현 순서
- 키보드(입력창) 선언
- 키보드(입력창) 메소드 사용
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 |