스피너도 리스트뷰처럼 여러개의 아이템을 보여주고 하나를 선택할 수 있도록 하는 선택 위젯이다. 스피너를 클릭하면 아래쪽에 창이 나오면서 항목을 쭉 보여준다.

스피너를 사용하기 위한 코드를 작성해보자.

먼저 메인 액티비티의 XML 코드를 아래와 같이 작성한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"/>

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

    </Spinner>

</LinearLayout>

텍스트뷰는 선택된 아이템을 알려주기 위한것이다.


package io.swnomad.spinner;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    String[] items = {"John", "Hangbae", "Panho", "Michael", "Henrry", "Kelly"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        /* 스피너를 위한 어댑터 구성 */
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, items);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        /* 스피너 객체 참조하여 어댑터 설정 */
        Spinner spinner = findViewById(R.id.spinner);
        spinner.setAdapter(adapter);

        /* 아이템이 선택되었을 때의 이벤트 처리 리스너 설정 */
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                textView.setText(items[position]+"이 선택되었습니다.");
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                textView.setText("아이템을 선택하세요");
            }
        });
    }
}

스피너도 선택 위젯이므로 어댑터 패턴을 사용한다. 따라서 데이터를 어댑터에 설정하였다. 여기서는 ArrayAdapter 클래스를 사용했다.

public ArrayAdapter(Context context, int textViewResourceId, T[] objects)

첫 번째 전달인자는 컨텍스트이다. 두 번째 전달인자는 뷰를 초기화할 때 사용되는 레이아웃의 리소스 ID값이다. 여기서 전달된 android.R.layout.simple_spinner_item은 안드로이드 API에 미리 정의된 값으로 문자열을 아이템으로 보여주는 스피너를 위한 레이아웃이다. 세 번째 전달인자는 아이템으로 보여줄 문자열 배열이다.

이제 스피너에 어댑터를 설정해주고 선택 이벤트 처리 리스너를 설정해준다.

앱을 실행하면 아래와 같은 화면을 볼 수 있다.

1
2

+ Recent posts