IT/Android

Custom view [Classname] overrides onTouchEvent but not performClick 오류 처리

토마토조아 2020. 4. 27. 23:03
728x90

안드로이드 커스텀뷰 개발을 하다보면 한번쯤 

아래와 같은 경고 메시지를 볼 수 있다.

Custom view [Classname] overrides onTouchEvent but not performClick

직역을 해보면, 커스텀뷰 Classname 은 onTouchEvent를 오버라이드 했지만, performClick은 오버라이드하지 않았다.

정도로 해석해볼 수 있다.

이 말이 무엇인지 찾아보니,

커스텀뷰를 만들어 낼때 접근성(Accessibility)를 고려해야 하는데, performClick은 이런 접근성을 고려할 수 있도록 도와준다고 한다.

Stack overflow를 찾아보면 다음과 같은 설명이 있다.

View가 click이 감지 될 때 performClick을 구현하지 않고 호출하게 되면 View가 내게 필요한 옵션 조치를 처리하지 못할 수 있다. Click이 발생하면 일부 접근성 서비스에서 performClick을 호출하므로 Click 동작을 처리하는 로직을 적용해놔야 한다.

따라서 구글이 강조하는 접근성(Accessibility)을 고려하는 앱을 만든다면, performClick 을 오버라이드를 하도록 하자.

// 모 대충 이런식으로?

    override fun onTouchEvent(ev: MotionEvent): Boolean {
        performClick()
        return super.onTouchEvent(if (mSwipeOrientation == VERTICAL) swapXY(ev) else ev)
    }

    override fun performClick(): Boolean {
        return super.performClick()
    }

대충 이런식으로 구성하면 경고 메시지가 사라진다.

728x90