주요 내용으로 건너뛰기

NestedScrollView가 보여질 때 제멋대로 스크롤 되는 문제

한 줄이면 해결되는 것을...

안드로이드 레이아웃을 만지다 보면 ScrollView 안에 ScrollView(RecyclerView같은)를 넣어야 할 때가 있는데, 이럴 때 쓰는게 바로 NestedScrollView이다. 그런데 경우에 따라서 이 NestedScrollView가 보여질 때 자기 멋대로 밑으로 스크롤이 내려갈 때가 있는데, 상황을 보아하니 뷰가 그려지면서 안에 넣어둔 또 다른 ScrollView에 포커스가 가버리면서 그렇게 되는 것 같더라. 그래서 이 포커스를 어떻게 없애지? 싶었는데 찾아보니 그걸 해결하는 옵션이 다 있었다. 아주 간단하다. XML상에 딱 한줄만 추가하면 된다.

바로 위의 코드상에서 ViewGroup 속성중에 보이는 descendantFocusability를 blocksDescendants를 설정하면 되는 것이다. 굳이 ViewGroup이라고 써둔 것은 보면 알겠지만 ViewGroup을 extend하는 클래스는 뭐든 적용 가능하다는 것을 보여주고 싶었기 때문. descendantFocusability 속성이 맡은 역할을 대강 번역해보자면 다음과 같다(위에 걸어둔 링크로 들어가보면 원문을 볼 수 있음).

ViewGroup 내에서 포커스를 맞출 뷰를 찾을 때 ViewGroup과 그의 하위 뷰의 관계를 설정한다.

이 중 위 예제에서 설정한 blocksDescendants는 해당 뷰그룹의 하위 뷰가 포커스를 받지 못하게 하는 옵션으로, 위에서 말했던 내부의 다른 스크롤뷰가 포커스를 받아가는 일이 없도록 해준다. 이렇게 간단한 것을 고민하고 있었다니...여튼 고민 해결.



안드로이드 애플리케이션 개발자

구본욱 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.
#15
맥(OSX)에서 깃허브 계정 여러개 쓰기
#17
[안드로이드] ConstraintLayout Guidelines, Barriers 사용하기