본문 바로가기
Android 개발/Android UI

Keyboard 가 보이는지 알수 있게 해주는 ViewTreeObserver

by Developer88 2017. 6. 10.
반응형

앱을 만들다 보면, 키보드(softKeyboard)가 화면에 올라가 있는지 아닌지 알아야 할 때 가 있는데요.

오늘은 어떻게 하면 화면을 측정해서, 키보드가 올라가는지 내려가 있는지 알 수 있는지에 관해서 정리해 보도록 하겠습니다.

(언젠가 구글에서 Keyboard의 show/hide 상태를 얻어올 수 있는 API가 생기면 좋겠다는 바람이 있네요)



1. XML 작업


먼저 EditText를 넣어서 키보드를 올릴경우에 어떻게 되는지 보도록 하겠습니다.

EditText를 넣어주고, 추가적으로 최상단 부모View에 id를 아래이미지와 같이 넣어줍니다.



또한 manifest파일에서 keyboard 가 올라갈 경우에 화면에 resize되도록 해주기 위해 adjustResize와, 

앱시작후에 키보드가 나타나있지 않도록 stateHidden 값을 windowSoftInputMode 속성에 넣어주겠습니다.




2. ViewTreeObserver 로 View 측정하기


ViewTreeObserver를 통해서 리스너를 달고, 전체 ViewTree의 변화가 생길때 시점을 알수가 있는데요.

이 시점에, getRootView메소드를 통해서 RootView의 높이와,

최상단 부모 View의 높이를 서로 비교해서, 일정 크기(200dp)이상의 차이가 발생한다면,

키보드가 올라왔다고 가정할 수 있습니다.    



mRootViewHeight와 mRelativeWrapperHeight는 px단위의 값이므로, 

이 값이 200dp이상의 차이가 나는지 알기위해서는 200dp를 px단위로 변환해서 비교합니다.

이때 아래의 dpToPx 메소드를 만들어서 변환을 해줍니다.




이제 실행만 해보면 되는데요.

키보드를 올리면 아래와 같은 화면을 볼 수 있습니다.



728x90

댓글