앱을 만들다 보면, 키보드(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 메소드를 만들어서 변환을 해줍니다.
이제 실행만 해보면 되는데요.
키보드를 올리면 아래와 같은 화면을 볼 수 있습니다.
'Android 개발 > Android UI' 카테고리의 다른 글
FragmentDialog 로 대화상자(팝업) 구현하기 (0) | 2019.01.08 |
---|---|
NavigationView를 이용한 Navigation Drawer 구현하기 (0) | 2017.07.23 |
TextView에 글자가 흐르게 하는 marquee (0) | 2017.07.06 |
EditText의 ImeOptions 로 키보드의 Action 설정하기 (0) | 2017.07.05 |
Splash (로딩화면) 화면 만들기 | Android (0) | 2017.06.18 |
ScrollView 에서 하단에 뷰를 붙일 때 필요한 fillViewport (0) | 2017.06.07 |
Activity 화면이 꺼지지 않도록 하려면? (0) | 2017.04.21 |
clipChildren 으로 ViewGroup의 범위를 벗어나는 안드로이드 UI (0) | 2017.04.17 |
안드로이드에서 카톡방식의 ViewPager + Tab 레이아웃 구현 (4) | 2017.03.13 |
ConstraintLayout 의 매력에 빠져보겠습니다 (0) | 2017.03.10 |
댓글