안드로이드 리스트뷰 속성 활용. (Android ListView Attributes), (divider, dividerHeight, entries, fastScrollEnabled)

2016. 1. 26. 14:07

1. ListView 속성

ListView 관련 코드를 작성할 때 추가적인 작업을 수행하지 않았다면 ListView는 시스템에서 제공하는 가장 기본적인 형태로 화면에 표시됩니다.
만약 ListView에 표시되는 아이템 사이에 구분선 모양을 변경하거나 선택된 아이템의 배경을 바꾸고 싶을 때는 어떻게 해야 할까요? 바로 ListView의 속성을 사용하면 됩니다.

2. 속성의 종류.

ListView는 아주 많은 속성들을 가지고 있습니다. ListView만을 위한 속성 뿐만 아니라 일반적인 위젯들이 가지는 속성까지 포함하면 수십 가지의 종류가 되죠.
여기서는 ListView에 특화된 속성들 중 몇 가지만 살펴보겠습니다. 몇몇 빠진 속성들은 추후 다른 예제들을 통해 살펴보도록 하겠습니다.

속성 이름 설명
divider 아이템 간 구분을 위한 색상 또는 이미지 지정.
dividerHeight divider의 높이 지정.
entries ListView에 아이템으로 지정할 array 리소스에 대한 참조.
footerDividersEnabled footer 뷰 위에 divider를 그릴지 여부 지정.
headerDividersEnabled header 뷰 밑에 divider를 그릴지 여부 지정.
cacheColorHint 스크롤 시 사용될 배경 색상 지정.
choiceMode 아이템 선택 모드 결정. (선택안함/한개만/여러개)
drawSelectorOnTop 선택자(selector)가 아이템 위 또는 아래에 그려질지 여부.
fastScrollEnabled 빠르게 스크롤 할 수 있는 thumb 사용할지 여부.
listSelector 아이템 선택 시 그려질 Drawable 또는 색상.
scrollingCache 스크롤하는 동안 그리기 캐쉬 사용 여부.
smoothScrollbar 화면에 표시되는 아이템 높이 계산 보정 여부.
stackFromBottom 아이템을 bottom부터 쌓을지 여부.
textFilterEnabled 아이템에 대한 문자열 필터링 기능 사용 여부.
transcriptMode 아이템이 추가될 때 bottom으로 자동 스크롤할지 여부.

3. 속성 활용하기

3.1 화면에 표시되는 ListView 아이템 사이에 경계선 또는 이미지 출력. (divider)

새로운 ListView를 만들 때 아이템을 여러 개 추가하면 아이템 사이에 한줄의 Gray 색상 구분선이 표시됩니다.
만약 아이템 경계를 표시해주기 위한 구분선의 형식을 바꾸고 싶을 경우 어떻게 해야 할까요? 가장 직관적인 방법으로 아이템 Layout 내의 위나 아래에 ImageView같은 위젯을 사용해 경계선으로 쓸 수 있겠죠. 하지만 썩 좋은 방법은 아닙니다. 아이템 간 경계를 위한 기능을 아이템 내부에 만드는 건 유지보수 측면에서 꽤나 번거로운 작업이니까요. (물론 유용하게 쓰일 때도 있겠지만...)


이럴 경우를 위해 ListView에서는 "divider"라는 속성을 제공합니다.

  * android:divider - 아이템 간 구분을 위한 색상 또는 이미지 지정.
        > 다른 리소스에 대한 참조 또는 테마 속성 값 지정.
        > 또는 컬러 값 지정. (#rgb, #argb, #rrggbb, #aarrggbb 등의 형식)

또한 "dividerHeight" 속성을 사용해 경계선의 높이를 조절할 수 있습니다.

  * android:dividerHeight - divider의 높이 지정.
        > 길이 단위 값 지정. (sp, px, dp, in, mm 단위 사용 가능)

divider와 dividerHeight 속성에 대한 사용 방법 및 예제 실행 결과화면은 아래와 같습니다.


리스트뷰 속성 divider, dividerHeight


3.2 리소스로부터 ListView 아이템 추가. (entries)

안드로이드 리스트뷰 기본 사용법에서 ListView에 아이템을 추가할 때 Adapter를 사용하는 Java 코드를 작성하였습니다. 하지만 Java 코드까지 작성하지 않아도 리소스에서 바로 아이템을 추가할 수 있는 방법이 있습니다.
바로 "entries" 속성에 array 리소스에 대한 참조를 지정하면 됩니다.

  * android:entries - 아이템에 지정될 데이터를 array 리소스에서 로드.
        > Java 코드에서 추가하는 방법보다 간단.
        > 메뉴와 같은 정적 컨텐트(한번 아이템이 구성되고 나면 추가 또는 삭제가 되지 않는)인 경우 유용.

"entries" 속성에 대한 사용 방법은 간단합니다. "res/values" 아래에 String Array 리소스를 포함하는 xml 파일을 생성하고, ListView의 "entries" 속성에 해당 리소스에 대한 참조를 지정하면 됩니다.

다음 xml 코드는 "res/values/my_array.xml"이라는 이름으로 작성한 예제입니다.

[STEP-1 for "entries"] "my_array.xml" - "/res/values/my_array.xml" 파일에 작성.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="myarray">
        <item>LIST1</item>
        <item>LIST2</item>
        <item>LIST3</item>
    </string-array>
</resources>

"entries" 속성에 String Array 참조를 지정하는 예제입니다.

[STEP-2 for "entries"] "activity_main.xml" - "entries" 속성에 String Array 참조.
    <ListView
        android:id="@+id/listview1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:entries="@array/myarray" />

위의 내용대로 코드를 작성하면 Java 코드를 전혀 작성하지 않고도 안드로이드 리스트뷰 기본 사용법에서 실행했던 예제와 완벽하게 동일한 결과 화면을 확인할 수 있습니다.


리스트뷰 속성 entries


3.3 thumb 사용하기로 빠른 스크롤 가능하게 만들기. (fastScrollEnabled)

ListView에 데이터가 추가되어 스크롤 기능이 활성화되면 손가락으로 화면을 누른 채로 위 또는 아래로 이동하여 스크롤 기능을 사용할 수 있습니다. 아이템이 많지 않다면 문제없이 사용할 수 있는 방법이지만, 만약 데이터가 많이 쌓이면 첫 번째 아이템에서 마지막 아이템으로 이동하기 위해 여러번의 이동 액션을 취해줘야 하는 불편함이 있습니다.


이런 경우 "fastScrollEnabled" 속성을 사용하여 thumb를 표시하고 빠른 위치 이동이 가능하게 만들 수 있습니다.

  * android:fastScrollEnabled - 빠르게 스크롤 할 수 있는 thumb 사용할지 여부.
        > true 또는 false.

"fastScrollEnabled" 속성을 true로 설정하면 아래와 같이 thumb가 표시되며 터치된 곳으로 빠르게 이동시킬 수 있습니다.


리스트뷰 속성 fastScrollEnabled


4. 참고.

.END.


ANDROID 프로그래밍/LISTVIEW