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