DoReMi

[Kotlin] 키보드 이벤트 본문

Android/개념

[Kotlin] 키보드 이벤트

도레미누 2023. 8. 15. 20:08

▶ 키보드 조작

 

 

▶ 예시

 

메인 액티비티에서 다음과 같은 변수 선언

// 키보드 관리자
lateinit var inputMethodManager:InputMethodManager

메인 액티비티 클래스 안에서 밑의 두개의 메소드를 선언하고 다른 화면에서 가져다 쓰는 형태로 사용.

// 키보드를 올려주는 메서드
fun showSoftInput(view:View, delay:Long){
    view.requestFocus()
    thread {
        SystemClock.sleep(delay)
        inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}

// 키보드를 내려주는 메서드
fun hideSoftInput(){
    if(currentFocus != null){

        inputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
    }
}

 

 


입력 후 키보드 사라지게 만들기

EditText 입력 이후 엔터 터치 시 키보드가 사라지면서 포커스를 해제한다

 // 키보드를 내린다
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
if(currentFocus != null) {
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
// 포커스를 해제한다.
currentFocus!!.clearFocus()

 

EditText에서 엔터키 누르면 다음 포커스로 커서 이동

// 엔터키를 눌렀을 때의 이벤트
setOnEditorActionListener { v, actionId, event ->
  // true를 반환하면 엔터키 누른 후에 포커스가 현재 EditText로 유지된다.
  // false를 반환하면 엔터키 누른 후에 다음 EditText로 포커스가 이동한다.
  false
}

 

키보드 나타내기
activityMainBinding.run 에서 작성

// 키보드가 나타나게 한다.
editTextText.requestFocus()

// 현재 EditText에 포커스를 준다.
requestFocus()

// 현재 포커스를 가지고 있는 View와 연결된 키보드를 올라오게 한다.
// onCreate 메서드가 끝나야 화면이 나타나는데 그 전에 키보드가 올라오게 하는
// 명령을 전달하기 때문에 무시된다. 이에, 쓰래드로 운영을 한다.
thread {
    // 500ms 쉬게 한다.
    SystemClock.sleep(500)
    // onCreate 메서드의 수행이 끝날 때 까지 대기한다.
    val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(currentFocus, 0);
}

editTextText.run{
    // 현재 EditText에 포커스를 준다.
    requestFocus()
    // EditText에 새로운 문자열을 설정한다.
}

 

 

// 첫 번째 EditText에 포커스를 준다.
editTextName.requestFocus()

thread {
SystemClock.sleep(500)
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(currentFocus, 0)
}