onClick과 clickable의 관계 [안드로이드 TMI 1편]

안드로이드 TMI 시리즈
별거 아니지만, 알아두면 쓸 때 있는 안드로이드 팁/정보들을 올리는 시리즈입니다.
대체로 간단하고 짧은 글을 올릴 계획입니다.

onClick과 clickable의 관계?

제목을 어떻게 지을지 몰라 조금 추상적으로 지었지만, 이번 주제의 핵심은 이겁니다.

onClick 함수를 지정해 준 View에는 따로 clickable을 true로 해줄 필요가 없다.

Button이라면 기본적으로 clickabletrue로 되어 있기 때문에 신경 쓸 필요가 없지만, 종종 TextViewLinearLayout 같은 것을 클릭 가능하게 만들어야 할 때가 있습니다.

저는 이런 경우 클릭 리스너를 지정하기 전에, ripple 효과를 테스트하기 위해 xml에서 clickable 속성을 true로 지정하곤 합니다.

ripple 효과가 잘 들어갔다는 것을 확인한 후에 저는 clickable 속성을 지우고 커밋 하는데요, 그 이유가 바로 나중에 어차피 클릭 리스너를 지정해 주면 자동으로 clickabletrue로 바뀌기 때문입니다.

왜?

클릭 리스너가 있다는 것은 당연히 클릭 가능한 뷰라는 의미입니다.
그래서 안드로이드에서는 setOnClickListener을 실행하면 자동으로 clickabletrue로 바뀌게끔 만들어 놨습니다.

아래 코드는 실제 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도 같이 써줬는데, 이제는 그럴 필요가 없습니다 🎉🎉

Tags: ,

Categories:

Updated:

블로그에 기여하기

Leave a comment