[Android] Spinner 사용하기

헤헤·2022년 11월 12일

Android

목록 보기
1/3

Spinner 란?

Spinner란 위와 같이 드롭다운 형태로 사용자가 원하는 아이템을 선택할 수 있도록 해주는 레이아웃입니다.

Spinner 레이아웃 만들기

먼저 xml 파일에 Spinner 레이아웃을 만듭니다.

<TextView
    android:id="@+id/categoryTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="카테고리"
    android:textColor="@color/black"
    android:textStyle="bold"
    android:textSize="16sp"
    android:layout_marginLeft="16dp"
    app:layout_constraintEnd_toStartOf="@id/categorySpinner"
    app:layout_constraintStart_toStartOf="parent"/>

<Spinner
    android:id="@+id/categorySpinner"
    android:layout_width="160dp"
    android:layout_marginLeft="10dp"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toEndOf="@+id/categoryTextView" />
  • TextViewSpinner 의 아이템들이 어떤 집합에 속하는지 나타내기 위해 만들었습니다.
  • Spinner 안에 들어갈 아이템들을 저장하기 위해 values/string.xml 파일에 string array를 만듭니다.
<resources>
  	<string-array name="category_array">
      <item>음식점</item>
      <item>관광지</item>
      <item>카페</item>
      <item>호텔</item>
    </string-array>
</resources>

ArrayAdapter 생성하기

Activity 혹은 Fragment 에서 ArrayAdapter 를 생성하여 Spinner 에 적용해줍니다.

private fun initSpinner() {
    ArrayAdapter.createFromResource(
        requireContext(),
        R.array.category_array,
        android.R.layout.simple_spinner_item
    ).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        binding.categorySpinner.adapter = adapter
    }
    
    binding.categorySpinner.onItemSelectedListener =
        object: AdapterView.OnItemSelectedListener {
            override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                if (p0 != null) {
                    Toast.makeText(requireContext(),p0.getItemAtPosition(p2).toString(),Toast.LENGTH_SHORT).show()
                }
            }

            override fun onNothingSelected(p0: AdapterView<*>?) {
                return
            }
        }
}

데이터바인딩을 사용중이므로 binding.categorSpinner.adapter = adapterSpinner 에 Adapter 를 적용했습니다.

// 데이터 바인딩을 사용하지 않을때
val categorySpinner: Spinner = findViewById(R.id.categorySpinner)

category.adapter = adapter

데이터 바인딩을 사용하지 않으면 위처럼 어댑터를 적용합니다.

AdapterView.OnItemSelectedListener 를 구현하여, 아이템이 선택되었을때 실행할 내용을 구현할 수 있습니다.

위에서는 간단하게 선택된 아이템을 Toast로 띄워줬습니다.

결과

profile
안녕하세요

0개의 댓글