Uing? Uing!!

[안드로이드 삽질기록] 화면 상 가려져 있는 뷰가 클릭될 경우 해결법 본문

Android

[안드로이드 삽질기록] 화면 상 가려져 있는 뷰가 클릭될 경우 해결법

Uing!! 2021. 8. 3. 00:39
반응형

발단

DrawerLayout을 처음 사용하면서 했던 아주 가벼운 삽질이다. (이 다음 포스팅으로 DrawerLayout에 대해 작성할 듯)

작업 중이던 레이아웃에는 EditText가 있었고, 좌측 메뉴를 누르면 이 EditText를 가리는 DrawerLayout이 나타나게 되어 있었다.

그런데, 좌측의 메뉴를 누른 후에는 EditText가 보이지 않음에도 불구하고,

DrawableLayout의 빈 공간(EditText가 숨겨져 있는 공간)을 클릭하니 키보드가 올라온 것이다.

삽질

처음에는 내가 레이아웃의 해당 위치에 다른 버튼 동작을 달아 놓은 줄 알고 코드를 찾아 보았지만 그런 코드는 없었다.

결국 이 스택오버플로 답변을 보고, '앗... 알고 있던 거였는데...' 하며 수정했다.

삽질일기를 열심히 써서 같은 문제로 여러 번 헤매지 않을 수 있도록 해야겠다 ㅠㅠ

결론

안드로이드의 Click Event는 간단히 말하자면, 사용자와 가장 가까운 뷰에서부터 시작해서, 더 밑에 있는 뷰까지 전달된다.

가장 위에 눈에 보이는 뷰가 clickable해서 이 Click Event가 consume되면, 다른 뷰로 전달되지 않는다.

반면 상위 뷰에서 클릭이벤트가 처리되지 않았을 경우에는 이 이벤트가 전달된다.

따라서 내 케이스의 경우에는 DrawerLayout에서 Click Event가 처리되지 않았기 때문에 그 밑에 숨어 있던 EditText의 클릭 이벤트가 호출된 것이다.

 

해결법은 간단하다.

레이아웃 상 가장 위에 있는 뷰에 이 옵션을 주면 범위 내에 가려져 있는 뷰들은 클릭되지 않는다.

android:clickable="true"

끝!

 

반응형
Comments