[피팅키보드] 화면 회전과 관련된 이슈

이상빈·2021년 11월 13일
0

플레이콘솔에 올라온 키보드 관련 버그를 추적하다가

어떤 부분에서 버그가 나는지 대충 파악을 했다.

키보드 입력(사용) 중 기기를 회전시키면 IllegalStateException이 발생했던 것.

키보드를 세로 방향에서 쓸 거라는 생각에 가로방향 회전을 미처 고려하지 못한 탓이었다.

이에 대한 해결 방법은

onConfigurationChanged() 메소드를 오버라이드하여, 화면 회전 시 키보드를 닫고, 바뀐 화면에 최적화된 키보드를 띄워주면 되는 것이다.

그래서 처음엔

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onConfigurationChanged(newConfig: Configuration) {
    onFinishInputView(finishingInput = true)
    onStartInputView(info = lastInfo, restarting = true)
}

위와 같은 코드를 작성하면 되겠지 했지만, 생각보다 그렇게 간단한 작업이 아님을 알게 되었다.

onFinishInputView()를 이용해서 기존 키보드를 닫는 건 됐지만, onStartInputView()로 새로 키보드를 열어주는 동작이 실행되지 않았다.

이에 대해 다른 키보드는 어떤 식으로 진행되는지 살펴봤더니, 삼성의 기본 키보드는 onFinishInputView() 메소드만 실행하는 것 같았다.

일단, 키보드를 다시 열어주는 건 차차 생각하기로 하고, 우선 키보드를 닫아주기만 하면 튕기는 현상은 발생하지 않으니까..onFinishInputView()만 실행하기로 한다.

다음 문제는 기기를 가로 방향으로 회전시켰을 때 적절한 키보드뷰를 호출하는 건데,

지금까지 내가 설계한 레이아웃은 모두 세로방향에서 사용 시 최적화된 레이아웃이라 이에 대한 고민을 전혀 들어가지 않았다.

가로방향에서 입력 시에는 기기의 높이와 너비를 모두 고려하여 레이아웃 설계를 처음부터 다시 해야 한다. 복잡한 문제는 젖혀 놓고, 우선 가로방향일 때 키보드의 높이를 먼저 설계해야 한다.

일단 개인적으로는 기기의 가로 길이(width)에 비례하여 그의 한 1/2 ~ 1/3 정도 높이로 키보드를 띄워주면 어떨까 싶은데..키보드는 팔과 손 전체를 유기적으로 사용하는 어플이라 에뮬레이터만으로 설계하기가 좀 까다롭다.

profile
발전을 좋아하는 사람

0개의 댓글