본문 바로가기
안드로이드

[안드로이드] ListView의 fadingEdge 없애는 방법

by 호군 2012. 9. 26.
반응형



시작하기


View 에는 fadingEdge라는 값을 설정 할 수 있습니다.

그래서 ListView를 보면, 아이템 개수가 많을 경우 위/아래에 희미한 색상의 라인이 생기는 것을 볼 수 있습니다.


<그림1. FadingEdge를 제거한 ListView>


<그림2. FadingEdge의 길이와 색상을 변경한 ListView>



FadingEdge 제거하기


안드로이드 Developer Document에는 아래의 attribute로 설정하라고 합니다. 

이때 attribute는 1개 또는 그 이상을 선택해도 상관없습니다.

android:requiresFadingEdge="[none | horizontal | vertical]"


하지만, 제가 사용하고 있는 framework에는 android:requiresFadingEdge 속성이 없더군요.

대신 android:fadingEdge라는 속성이 있었습니다. 혹시 위의 attribute가 안되시면 android:fadingEdge로 해보세요.

android:fadingEdge="[none | horizontal | vertical]"


ex) FadingEdge 제거하기

android:fadingEdge="none"




FadingEdge 길이 변경하기


FadingEdge의 길이는 android:fadingEdgeLength 속성으로 변경하실 수 있습니다.

이때 값은 dimension 값으로 px, dp, sp 등의 값으로 하셔야 합니다.

android:fadingEdgeLength="20sp"




FadingEdge 색상 변경하기


FadingEdge의 색상은 android:cacheColorHint 속성으로 변경하실 수 있습니다.

android:cacheColorHint="#FF7F7F7F"







질문


먼저 저는 키 기반의 환경에서 작업을 하고 있습니다. 아마도 터치 기반의 환경은 이 문제와는 해당사항이 없지 않을까 생각됩니다.

ListView를 setItemsCanFocus(true)를 설정하고 FadingEdge를 none으로 했을 때, FadingEdge가 none으로 설정이 됐지만, KEYCODE_DPAD_UP/KEYCODE_DPAD_DOWN 이벤트로 스크롤이 되지 않는 현상을 보이고 있습니다. 또한 FadingEdgeLength를 설정을 해도 동일한 현상을 보이고 있습니다. 해결책을 아시는 분은 댓글을 달아주셨으면 감사하겠습니다.



해결방법


ListView를 사용 할 때는 되도록 Item이 직접 focus를 갖도록 하지 않아야 할 것 같습니다. ListView로부터 focus를 뺏으면 ListView를 제어하는데 좀 더 신경을 많이 써야 되네요.

해결 방법은 직접 키 이벤트를 받아서 직접 scroll 하는 방법을 사용했습니다.

코드를 통해서 되지 않는 이유를 증명하면 좋겠지만, 정확한 시작점을 잡지 못하겠네요..


반응형