카테고리 없음

스피너 사용하기

백수를 탈출하자 2023. 3. 11. 18:10

격자 모양으로 여러 아이템을 보여주는 경우가 많지만 그 외에도 여러가지 아이템 중에서 하나를 선택하는 전형적인 위젯으로 스피너를 들 수 있습니다.스피너는 일반적으로 원도우에서 콤보박스로 불립니다.네Spinner 프로젝트를 민듬니다 패키지 이름은 org.techtown.spinner로 입력하고 프로젝트 창이 만들어지면 activity_main.xml 파일을 열니다.디자인 화면에서 추가할 떄는 최상위 레이아웃을 LinearLayoput으로 변경하고 orientation속성 값은 vertical로 설정합니다.그다음에는 팔레트에서 텍스트뷰 하나를 끌어다 놓고 Container 폴더 안에 있는 Spinner를 끌어다 놓습니다 스피너 id값은 spinner로 설정하고 텍스트 뷰의 text 속성 값은 '선택한 아이템'으로 설정합니다.textSize속성 값은 30sp로 설정합니다

 

MainActivity.java

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

public class MainActivity extends AppCompatActivity {
    TextView textView;
    String[] items = {"mike", "angel", "crow", "john", "ginnie", "sally", "cohen", "rice"};

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

        textView = findViewById(R.id.textView);
        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<?> adapterView, View view, int position, long id) {
                textView.setText(items[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                textView.setText("");
            }
        });
    }
}

onCreate 메서드 안을 보면 텍스트뷰와 스피너 객체 findViewById 메서드로 찾아낸 후 클래스 안에 선언된 변수에 활당해 두었습니다.이렇게 하면 MainActivity 클래스 안에 있는 어떤 메서드에서도 접근할 수 있습니다. 이 텍스트뷰는 사용자가 스피너의 한 아이템을 선택했을 때 선택한 값을 보여주기위해 추가한 것으로 아이템이 하나 선택되면onItemSelectedListener입니다.스피너 객체도 선택 위젯이므로 setAdapter메서드의 파라미터로 어댑터 객체를 전달해야 합니다.그런데 리싸이클러뷰를 만들 떄는 어댑터를 직정 정의헀었는데 여기에서는 정의하지 않고 두 줄의 코드만 추가했습니다.이유로는 API에서 제공하는 기본 어댑터들이 있기 떄문입니다. 사용한 어댑터는 ArrayAdaoter로 배열로 된 데이터를 아이템으로 추가할 떄 하용합니다.ArrayAdapter 객체를 만들 떄는 simple_spinner_item이라는 레크아웃을 지정합니다.레이크아웃 스피너를 간단하게 사용할 수 있도록 API에서 제공하는 레이아웃입니다 이떄 사용하는 메서드가 바로 setDrop-DownViewResource 메서드 입니다.첫 번째 파라미터는 Context객체이므로 액티비티인 this를 전달하면 됩니다. 두번쨰 파라미터는 뷰를 초가화할 떄 사용되는 xml 레이크아웃의 리소스 ID 값으로 코드에서android.R.layout.simple_spinner_item을 전달하였습니다 세 번쨰 파라미터는 아이템으로 보일 문자열 데이터들의 배열입니다.setDropDownViewResource 메서드는 스피너의 각 아이템들을 보여줄 뷰애 사용되는 레이아웃을 지정하는 데 사용하며 안드로이드에서 미리 정의한 리소스인 android.R.layout.simple_spinner_item값을 전달하면 가장 단순한 형태의 뷰가 보이게 됩니다.

스피너를 이용한 아이탬 선택