안드로이드 리스트뷰 속성 2. (Android ListView Attributes 2), (listSelector, stackFromBottom, transcriptMode)

2016. 1. 28. 13:01

1. ListView 속성 활용하기 계속.

지난 글 [안드로이드 리스트뷰 속성 활용]에서 살펴본 ListView 속성에 대해 조금 더 정리하겠습니다.

1.1 아이템 선택 시 아이템의 배경색 또는 이미지 변경. (listSelector)

ListView에 추가된 아이템을 누르면, 아이템의 배경이 표시되지 않습니다. (눌려질 때 회색으로 잠깐 반전.)
이 때 listSelector 속성을 사용하면 아이템이 선택될 때 나타나는 색상을 변경할 수 있습니다.

  * android:listSelector - 현재 선택된 아이템을 표시하는 Drawable 지정. 
        > 다른 리소스에 대한 참조 또는 테마 속성 값 지정.
        > 또는 컬러 값 지정. (#rgb, #argb, #rrggbb, #aarrggbb 등의 형식)


리스트뷰 속성 listSelector


listSelector 속성은 단순 색상 값을 지정할 수도 있고 Drawable을 지정할 수도 있습니다. (이미지를 사용하는 경우, 이미지와 아이템의 크기가 상이하다면 아이템 크기에 자동으로 맞춰집니다.)


리스트뷰 속성 listSelector 2


또한 StateListDrawable 리소스를 사용하면 ListView 아이템의 상태(normal, pressed, ...)에 따라 다른 drawable을 사용할 수도 있습니다.

StateListDrawable 리소스를 사용하는 과정은 아래와 같습니다.

[STEP-1 for "listSelector"] "listview_selector.xml" - "/res/values/listview_selector.xml" 파일 생성.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/selector_pressed" />
    <item android:drawable="@drawable/selector_normal" />
</selector>
[STEP-2 for "listSelector"] "activity_main.xml" - ListView의 listSelector 속성 지정.
    <ListView
        android:id="@+id/listview1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:listSelector="@drawable/listview_selector" />


리스트뷰 속성 listSelector 3


1.2 아이템 추가 시 아래(bottom)부터 쌓이게 만들기. (stackFromBottom)

기본적으로 ListView에 아이템을 추가하면 위(top)에서부터 아래 방향으로 늘어나게 됩니다. 이걸 바꿔서 아래(bottom)부터 위 방향으로 쌓이게 만드려면 stackFromBottom 속성을 사용하면 됩니다.

stackFromBottom을 사용할 때 한가지 주의할 점은 아이템의 순서가 바뀐다는 의미로 오해해서는 안된다는 것입니다. 예제 그림처럼 쌓이는 방향만 다른 것이지 아이템의 순서가 바뀌는 것은 아닙니다.

  * android:stackFromBottom - 아이템을 bottom부터 쌓을지 여부.
        > true 또는 false 값 지정.


리스트뷰 속성 stackFromBottom


1.3 새로운 아이템 추가 시 bottom 아이템으로 자동 스크롤 하기. (transcriptMode)

아이템 추가 시 bottom 아이템 위치로 자동으로 스크롤하게 만들기 위해서 transcriptMode 속성을 사용합니다. (카카오톡 같은 채팅 앱에서 대화 내용이 추가되면 자동으로 가장 마지막(bottom) 대화 내용을 위치에 이동하는 기능을 떠올리면 쉽게 이해되실 거라 생각합니다.)

  * android:transcriptMode -  아이템 추가 시 bottom 아이템 위치로 자동 스크롤하는 모드 설정.
        > disabled, normal, alwaysScroll 설정 가능
          -. disabled : transcriptMode 사용 안함. (기본 값)
          -. normal : 마지막 아이템이 화면에 표시된 상태에서, 
                      데이터 변경 notification(notifyDataSetChanged())을 받은 경우 자동 스크롤.
          -. alwaysScroll : 아이템이 화면에 표시 중인 여부와 관계없이 무조건 스크롤.

간단한 예제 화면을 통해 transcriptMode 속성 결과를 살펴보겠습니다. 그림과 같이 Button과 ListView를 하나씩 추가하고 Button을 클릭하면 ListView의 마지막에 "NEW ITEM" 이라는 문자열 아이템을 추가하도록 구현하였습니다.


리스트뷰 속성 transcriptMode


먼저 transcriptMode 속성을 지정하지 않거나 "disabled"로 되어 있으면 새로운 아이템을 추가해도 자동 스크롤되지 않습니다.


리스트뷰 속성 transcriptMode disable


다음으로 transcriptMode 속성을 "normal"로 지정하면 마지막 아이템 표시 및 데이터 변경 notification(notifyDataSetChanged()) 호출 여부에 따라 자동 스크롤 기능이 수행됩니다.


리스트뷰 속성 transcriptMode normal


마지막으로 transcriptMode 속성을 "alwaysScroll"로 지정하면 마지막 아이템 표시 여부와 관계없이 무조건 자동 스크롤됩니다.


리스트뷰 속성 transcriptMode alwaysScroll


2. 참고.


ANDROID 프로그래밍/LISTVIEW