마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 클릭 시 소프트 키보드 유지하고 싶습니다.

0 추천

안녕하세요 현재 채팅어플 개발 중인데 edittext 글 입력 후 전송 button 누르면 포커스가 이동하여 키보드가 내려갑니다.

글 작성 후 버튼 누르면 키보드가 유지되었으면 합니다.(내려갔다가 다시 올라오지 않고 자연스럽게, 카카오톡 처럼)

강제로 button에 edittext.requestFocus()를 줘 봐도 소용이 없고 InputMethodManager를 통해 키보드를 강제로 올리면 포커스가 이동하면서 키보드가 내려갔다가 다시 올라와서 부자연스러우며 RecyclerView 클릭 시 키보드 내려가야 되는데 아예 키보드가 고정이 되 버립니다.(물론 RecyclerView 자체와 Adapter의 itemView에 키보드 내리는 코드도 다 작성 해 보고 포커스를 이용하는 방법, layout xml파일에서 windowSoftInputMode 설정도 다 해봤지만 소용 없었습니다.)

그냥 글만 올리면 키보드를 상시 고정해 두어도 되는데 문제는 다른 부가기능이 많아서 키보드를 마냥 고정할 수는 없습니다.

현재 키보드가 올라왔는지를 판단하는 리스너는 구현 된 상태이며 완벽하게 동작하지만 Focus 리스너가 먼저 동작을 해 버리니 처리를 어떻게 해야 될 지 모르겠습니다. 생각보다 더 간단할거 같은데....

혹시 해당 이슈 겪었거나 방법을 아시는분 답변 해 주시면 감사하겠습니다.

 

msg.setOnFocusChangeListener { v, hasFocus ->
    if (hasFocus){
        var imm =  activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
    }
}
disposeBag!!.add(
    RxView.clicks(send)
        .throttleFirst(1, TimeUnit.SECONDS)
        .subscribe {
            //msg.requestFocus()
            //msg.isFocusableInTouchMode = true
            if (!msg.text.toString().isNullOrEmpty()){
                sendMessage(msg.text.toString())
            }
        }
)
티모키 (180 포인트) 님이 2020년 6월 5일 질문
혹시 해당 문제 해결 하셨을까요?
네 문제는 GlobalLayoutListener로 키보드 올라왔을 때 화면 높이를 구하는 부분에서 계속 refresh 하여 발생하는 문제였습니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...