onClick과 clickable의 관계 [안드로이드 TMI 1편]
안드로이드 TMI 시리즈
별거 아니지만, 알아두면 쓸 때 있는 안드로이드 팁/정보들을 올리는 시리즈입니다.
대체로 간단하고 짧은 글을 올릴 계획입니다.
onClick과 clickable의 관계?
제목을 어떻게 지을지 몰라 조금 추상적으로 지었지만, 이번 주제의 핵심은 이겁니다.
onClick 함수를 지정해 준 View에는 따로 clickable을 true로 해줄 필요가 없다.
Button
이라면 기본적으로 clickable
이 true
로 되어 있기 때문에 신경 쓸 필요가 없지만, 종종 TextView
나 LinearLayout
같은 것을 클릭 가능하게 만들어야 할 때가 있습니다.
저는 이런 경우 클릭 리스너를 지정하기 전에, ripple 효과를 테스트하기 위해 xml에서 clickable
속성을 true
로 지정하곤 합니다.
ripple 효과가 잘 들어갔다는 것을 확인한 후에 저는 clickable
속성을 지우고 커밋 하는데요, 그 이유가 바로 나중에 어차피 클릭 리스너를 지정해 주면 자동으로 clickable
이 true
로 바뀌기 때문입니다.
왜?
클릭 리스너가 있다는 것은 당연히 클릭 가능한 뷰라는 의미입니다.
그래서 안드로이드에서는 setOnClickListener
을 실행하면 자동으로 clickable
이 true
로 바뀌게끔 만들어 놨습니다.
아래 코드는 실제 android.view.View
클래스의 코드입니다.
// View.setOnClickListener
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
xml에서 android:onClick=""
을 사용해도 어차피 setOnClickListener
가 실행되기 때문에 마찬가지입니다.
결론
이 간단한 사실을 알게 됨으로써 우리는 불필요한 코드를 줄일 수 있게 됐습니다. (물론 클릭 가능하다는 것을 명시하기 위해 clickable
을 쓸 수도 있지만요)
다음 TMI에서도 이런 소소한 팁 들고 오겠습니다 ✨
도움 되셨다면 여기저기 공유 부탁드릴게요 😊
P.S.
저는 지금까지 clickable
만 쓰면 항상 이 경고가 떠서 focusable
도 같이 써줬는데, 이제는 그럴 필요가 없습니다 🎉🎉
Leave a comment