본문 바로가기
Android

[Android] 안드로이드 : 스피너 사용하기

by 꿈나무 김땡땡 2019. 12. 4.

1. 스피너란?

스피너는 보통 콤보박스라고 불리는 위젯입니다.

한 항목 당 글자 하나만을 보여주는 경우가 많고 가끔 이미지와 글자가 함께 보이거나 여러 개의 글자가 보이기도 합니다.

여러 개의 항목 중에서 하나를 선택하는 방식은 앞에서 만들어보았던 리스트뷰와 같습니다.

즉, 선택 위젯에 해당하며 어댑터를 사용해서 만들게 됩니다.

그런데 한 아이템으로 보이는 것이 텍스트 하나인데도 각각의 아이템을 위한 뷰를 별도로 만들어야 할까요?

한 아이템이 텍스트 하나인 경우를 위해 좀 더 간단한 방식을 사용할 수 있습니다.

 

 

 

2. 스피너 만들기

 

 

(1) XML 레이아웃

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="343dp"
        android:layout_height="42dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.493"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="선택 : "
        android:textSize="40sp"
        app:layout_constraintBottom_toTopOf="@+id/spinner"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

(2) MainActivity.java

import androidx.appcompat.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;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    String[] items = {"소녀시대", "소녀시대2", "소녀시대3", "소녀시대4"};

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

        textView = (TextView) findViewById(R.id.textView);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_spinner_item, items
        );

        // 드롭다운 클릭 시 선택 창
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       // 스피너에 어댑터 설정
       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("선택 : ");
           }
       });
    }
}

 

 

  ※ 스피너는 이미 선택된 아이템이 보이는 뷰와 아이템을 선택하기 위해 보이는 뷰가 서로 다릅니다. 따라서 두 개의 뷰가 있어야 합니다.

     > setDropDownResource : 아이템을 선택하기 위해 보이는 뷰

     > setOnItemSelectedListener : 이미 선택된 아이템이 보이는 뷰

 

 

 

예시 화면

 

댓글