일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Android Studio
- github submodule
- 게임개발
- 내 맘대로 정리한 안드로이드
- 안드로이드개발
- 쿼터뷰
- github
- 서브모듈 pull
- 티스토리
- 안드로이이드 submodule
- Kotlin
- gitlab submodule
- 앱개발
- 2d게임
- Unity
- 앱
- 서브모듈 sourcetree
- 코틀린
- 타이쿤
- GIT
- 유니티
- 개발
- firebase
- 안드로이드
- DataBinding
- 목서버
- 카페오냥
- Android
- java
- submodule sourcetree
- Today
- Total
Uing? Uing!!
[안드로이드 삽질기록] 화면 상 가려져 있는 뷰가 클릭될 경우 해결법 본문
발단
DrawerLayout을 처음 사용하면서 했던 아주 가벼운 삽질이다. (이 다음 포스팅으로 DrawerLayout에 대해 작성할 듯)
작업 중이던 레이아웃에는 EditText가 있었고, 좌측 메뉴를 누르면 이 EditText를 가리는 DrawerLayout이 나타나게 되어 있었다.
그런데, 좌측의 메뉴를 누른 후에는 EditText가 보이지 않음에도 불구하고,
DrawableLayout의 빈 공간(EditText가 숨겨져 있는 공간)을 클릭하니 키보드가 올라온 것이다.
삽질
처음에는 내가 레이아웃의 해당 위치에 다른 버튼 동작을 달아 놓은 줄 알고 코드를 찾아 보았지만 그런 코드는 없었다.
결국 이 스택오버플로 답변을 보고, '앗... 알고 있던 거였는데...' 하며 수정했다.
삽질일기를 열심히 써서 같은 문제로 여러 번 헤매지 않을 수 있도록 해야겠다 ㅠㅠ
결론
안드로이드의 Click Event는 간단히 말하자면, 사용자와 가장 가까운 뷰에서부터 시작해서, 더 밑에 있는 뷰까지 전달된다.
가장 위에 눈에 보이는 뷰가 clickable해서 이 Click Event가 consume되면, 다른 뷰로 전달되지 않는다.
반면 상위 뷰에서 클릭이벤트가 처리되지 않았을 경우에는 이 이벤트가 전달된다.
따라서 내 케이스의 경우에는 DrawerLayout에서 Click Event가 처리되지 않았기 때문에 그 밑에 숨어 있던 EditText의 클릭 이벤트가 호출된 것이다.
해결법은 간단하다.
레이아웃 상 가장 위에 있는 뷰에 이 옵션을 주면 범위 내에 가려져 있는 뷰들은 클릭되지 않는다.
android:clickable="true"
끝!
'Android' 카테고리의 다른 글
[안드로이드 팁] public.xml: 라이브러리 리소스 숨기기 (0) | 2021.10.20 |
---|---|
[안드로이드 팁] Build Varients: 같은 프로젝트로 두 개 이상의 앱 빌드하기(BuildTypes & ProductFlavors) (1) | 2021.10.20 |
[안드로이드 팁] elevation: 뷰에 그림자를 주는 가장 쉬운 방법 (0) | 2021.07.30 |
[안드로이드 팁] Chrome DevTools: 웹뷰를 디버깅해 보자! (0) | 2021.07.30 |
[내 맘대로 정리한 안드로이드] findViewById의 사용을 최소화해야 하는 이유와 대체 방법(ViewBinding) (1) | 2021.07.16 |