레이블이 ListActivity인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ListActivity인 게시물을 표시합니다. 모든 게시물 표시

2010년 9월 13일 월요일

ListView의 레이아웃 변경 (Change Layout for ListView)

안드로이드에서는 ListView가 화면에 보이는 레이아웃을 XML로 정의할 수 있다.

대부분의 책에 보면 ListView의 예제 코드에서는 android.R.layout.simple_list_item_1을 사용하고 있다. 그 경우 레이아웃은 아래와 같다.

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, R.id.listentry, data);
 
    setListAdapter(adapter);


android.R로 시작하는 경우 안드로이드에 기본으로 들어있는 리소스들을 참조하는 것이다. 안드로이드에 기본으로 들어있는 layout의 목록은 다음과 같다.

android.R.layout.activity_list_item
android.R.layout.browser_link_context_header
android.R.layout.expandable_list_content
android.R.layout.preference_category
android.R.layout.select_dialog_item
android.R.layout.select_dialog_multichoice
android.R.layout.select_dialog_singlechoice
android.R.layout.simple_dropdown_item_1line
android.R.layout.simple_expandable_list_item_1
android.R.layout.simple_expandable_list_item_2
android.R.layout.simple_gallery_item
android.R.layout.simple_list_item_1
android.R.layout.simple_list_item_2
android.R.layout.simple_list_item_checked
android.R.layout.simple_list_item_multiple_choice
android.R.layout.simple_list_item_single_choice
android.R.layout.simple_spinner_dropdown_item
android.R.layout.simple_spinner_item
android.R.layout.test_list_item
android.R.layout.two_line_list_item


아래는 android.R.layout.simple_expandable_list_item_1을 사용한 경우이다.


아래는 android.R.layout.simple_expandable_list_item_single_choice를 사용한 경우이다.


안드로이드에 기본적으로 들어있는 레이아웃이 마음에 드는게 없으면 직접 레이아웃을 정의해 사용할 수도 있다.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listentry"
      android:textSize="16sp"
      android:textColor="#ff0000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

위와같이 /res/layout 디렉토리에 xml파일을 넣어주고 ArrayAdapter를 만들때 레이아웃 파일을 지정해 주면 된다.

    adapter = new ArrayAdapter<String>(this, R.layout.simple_layout, R.id.listentry, data);
 
    setListAdapter(adapter);



레이아웃에 단순히 TextView 하나만 넣지 않고 컨테이너를 사용해서 여러 위젯을 집어넣을 수도 있다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
  <TextView android:text="Airport:"
          android:textSize="14sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  <TextView android:id="@+id/listentry"
          android:textSize="18sp"
          android:textColor="#ff0000"
          android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

    adapter = new ArrayAdapter<String>(this, R.layout.entrylayout, R.id.listentry, data);
 
    setListAdapter(adapter);