우찬쓰 개발블로그

CardView안의 RecyclerView 클릭 막기 본문

안드로이드/안드로이드 개발

CardView안의 RecyclerView 클릭 막기

이우찬 2024. 7. 29. 10:28
반응형

CardView안에 RecyclerView를 넣은 레이아웃 구조의 형태에서 CardView에만 클릭이벤트를 넣었는데도 RecyclerView의 아이템의 해당하는 영역에 클릭을하면 CardView에서 클릭이벤트가 발생하지 않는다.

 

적당한 xml 옵션이 없는거 같아서 (clickable, focusable 만으로는 해결이 안되는거 같음,,) 그냥 RecyclerView의 상위 ViewGroup을 하나 만들고 이 ViewGroup에서 TouchEvent를 인터셉트 하는게 빠른거 같았다.

 

기본적으로 터치 이벤트는 아래의 플로우로 하위 뷰까지 전달된다.

터치 이벤트의 전달 과정

클릭이벤트도 결국 아래 플로우를 응용한 구조이기 때문에 중간에 onInterceptTouchEvent를 true로 주면 그 아래까지 터치 이벤트가 전달이 되지 않기 때문에 해결이 된다.

그래서 간단하게 아래같은 Custom Class를 하나 만들어서 상위 ViewGroup으로 넣어줬다.

 

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.widget.FrameLayout

class TouchBlockFrameLayout @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {

    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        super.onInterceptTouchEvent(ev)
        return true
    }
}

 

이렇게 해결이 되었다.

 

근데 왜 XML 옵션만으로 해결이 안되는지 모르겠다.. (내가 모르는 옵션이 있나;;)

 

Reference

https://hellose7.tistory.com/72

 

[UI] Touch Event (2) - 터치 이벤트의 시작과 끝

이전 포스팅 - 2021.09.15 - [Android/TouchEvent] - [Android] Touch Event (1) - 터치 이벤트 전달 과정 [Android] Touch Event (1) - 터치 이벤트 전달 과정 https://readystory.tistory.com/185 [Android] 안드로이드의 Touch Event 는 어

hellose7.tistory.com

 

반응형
Comments