마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ListView의 Selector

0 추천

ListView의 행을 선택했을 때 기본적으로는 색이 잠시 변했다가 원래대로 돌아오지만

선택되어있는 상태를 표시하기 위해서

listview.setSelector(new ColorDrawable(0xff78cce8));

이런식으로 Selector를 설정해 줬습니다.

그 결과 선택된 행의 배경이 해당 색상으로 변화된 상태로 유지는 되는데

ListView가 스크롤 될 때 해당 아이템이 화면 밖으로 올라가거나 내려가는 경우 Selector가 같이 스크롤 되지 않고 화면 끝에 남아있는 현상이 발생합니다.

이렇게 되는 이유가 무엇인가요? 그리고 Selector도 같이 이동되게 하는 방법이 있나요?

 

appa (3,380 포인트) 님이 2013년 2월 21일 질문

1개의 답변

0 추천
 
채택된 답변

/data/res/drawable/list_selector_holo_dark.xml

selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_window_focused="false" android:drawable="@color/transparent" />

    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
    <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
    <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/list_selector_disabled_holo_dark" />
    <item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
    <item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
    <item android:state_focused="true"                                                             android:drawable="@drawable/list_focused_holo" />

위는 안드로이드 플랫폼안에 있는 selector drawable의 예제입니다. selector는 단순히 선택되었을때 표시되는 drawable이 아닙니다. selector drawable은 focus되었을때 press되었을때 그리고 그 상태가 해제되었을때 모든 상태에 대해서 필요한 drawable을 공급해주어야 합니다. 기본적으로 위와 같고 state_selected에 원하는 drawable을 넣고 selection되었을때의 drawable을 따로 넣어주어야겠죠. setSelection등의 메서드도 확인해보시구요.

회색 (21,000 포인트) 님이 2013년 2월 21일 답변
appa님이 2013년 2월 22일 채택됨
답변 감사합니다. selector에 대해서 조금은 알 것 같습니다.
그런데 selector가 화면 끝에 남아있는 것은 해결하지 못했네요.
그래서 ListView에 추가할 item에 선택 여부를 알려주는 값을 설정하여 background를 바꿔주는 방법으로 해결했어요.
...