본문 바로가기
android

[android] NestedScrollView에서 ViewPager2가 슬라이드 이동을 하지 않는 문제

by arirang_ 2023. 9. 10.

ViewPager2가 슬라이드 이동을 하지 않는 문제는 NestedScrollView가 터치 이벤트를 가로채서 발생하는 문제일 수 있다.

ViewPager2에 터치 이벤트가 전달되어야 한다.

 

이 문제를 해결하기 위해서는 ViewPager2가 터치 이벤트를 받을 수 있도록 NestedScrollView를 터치 이벤트를 투과시키는 방법을 사용해야 한다.

이를 위해 NestedScrollView에 다음과 같은 속성을 추가할 수 있다.

 

android:fillViewport="true"
android:descendantFocusability="blocksDescendants"
  • android:fillViewport="true": NestedScrollView가 자식 뷰를 포함하는 데 필요한 공간을 차지하도록 한다.
  • android:descendantFocusability="blocksDescendants": 자식 뷰들이 포커스를 가지지 못하도록 한다.

이렇게 속성을 추가하면 NestedScrollView가 터치 이벤트를 ViewPager2로 전달하여 슬라이드 이동(스와이프 동작)이 가능하게 된다.

 

 

 

※참고※

더보기

안드로이드에서 포커스는 사용자 인터페이스 요소 중 하나가 현재 사용자와의 상호작용을 받을 수 있는 상태를 나타내는 것입니다. 예를 들어, 버튼, 입력 필드 (텍스트 상자), 체크 박스 등은 포커스를 가질 수 있으며 사용자가 터치하거나 키보드로 해당 요소와 상호작용할 때 포커스가 필요합니다.

android:descendantFocusability 속성을 blocksDescendants로 설정하면 해당 뷰그룹(여기서는 NestedScrollView) 내부의 모든 자식 뷰들이 포커스를 가질 수 없게 됩니다. 즉, 사용자는 이 뷰그룹 내부의 자식 뷰에 포커스를 주거나 포커스를 받을 수 없게 됩니다. 이것은 자식 뷰들이 사용자의 입력을 가로채지 않도록 하거나 특정 뷰그룹이 포커스를 완전히 관리하고자 할 때 유용합니다.