개요

안드로이드에서 스피너(Spinner)는 웹 개발에서 흔히 사용하는 드롭다운(dropdown)과 같은 역할을 합니다.
사용자는 스피너를 눌러서 여러 가지 옵션 중에서 하나를 선택할 수 있습니다.
스피너는 모바일 앱에서 여러 옵션 중 하나를 선택해야 하는 경우에 자주 사용됩니다.

예제 코드

package kr.zenn.basiclayout

import android.R
import android.os.Bundle
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kr.zenn.basiclayout.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    // View Binding을 사용해 레이아웃 뷰를 쉽게 참조할 수 있도록 설정
    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 바인딩된 루트 뷰를 설정
        setContentView(binding.root)

        // 1. 스피너에 표시할 데이터 배열 생성 (첫 번째 항목으로 "선택 안함" 추가)
        val items = arrayOf("선택 안함", "Option 1", "Option 2", "Option 3", "Option 4")

        // 2. ArrayAdapter 생성 및 스피너에 설정
        val adapter = ArrayAdapter(this, R.layout.simple_spinner_item, items)

        // 3. 스피너의 드롭다운 목록이 표시될 때 사용할 레이아웃 리소스를 설정
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

        // 4. 스피너에 어댑터를 연결하여 데이터를 표시
        binding.spinner.adapter = adapter

        // 5. 스피너의 항목 선택 리스너 설정
        binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(
                parent: AdapterView<*>?,
                view: android.view.View?,
                position: Int,
                id: Long
            ) {
                // "선택 안함"이 선택되었는지 확인
                if (position == 0) {
                    // 첫 번째 항목이 선택되면 선택된 값을 표시하지 않음
                    binding.selectedTextView.text = ""
                } else {
                    // 다른 항목이 선택되면 해당 항목의 텍스트를 표시
                    val selectedItem = items[position]
                    binding.selectedTextView.text = "선택된 값: $selectedItem"
                    // 선택된 항목을 Toast 메시지로 출력
                    Toast.makeText(this@MainActivity, "선택된 항목: $selectedItem", Toast.LENGTH_SHORT)
                        .show()
                }
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
                // 선택된 항목이 없을 때 동작 (필요에 따라 구현 가능)
            }
        }
    }
}

설명

  • ArrayAdapter와 데이터 배열
    • 스피너에 표시할 데이터를 배열로 생성한 후(arrayOf), 이를 스피너에 연결하는 ArrayAdapter를 사용합니다.
    • ArrayAdapter는 데이터를 스피너에 표시하는 데 필요한 어댑터이며, 여기서 arrayOf("선택 안함", "Option 1", "Option 2", "Option 3", "Option 4")로 데이터 배열을 제공합니다.
  • adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    • 이 코드는 스피너 항목이 선택될 때 표시되는 드롭다운의 레이아웃을 정의합니다.
    • simple_spinner_dropdown_item은 안드로이드에서 기본 제공하는 간단한 스피너 드롭다운 항목 레이아웃입니다. 이 레이아웃은 항목들이 드롭다운 리스트에 어떻게 표시될지를 정의합니다.
    • 만약 이 줄을 생략하면, 스피너의 항목이 기본 레이아웃으로 표시될 수 있지만, 레이아웃을 명확히 지정함으로써 드롭다운의 UI가 일관되게 보이게 됩니다.
  • onItemSelectedListener (항목 선택 리스너)
    • 사용자가 스피너에서 항목을 선택하면 onItemSelectedListener가 호출됩니다. 이 리스너는 두 가지 메서드를 제공합니다:
      • onItemSelected: 항목이 선택되었을 때 호출되는 메서드.
      • onNothingSelected: 아무 항목도 선택되지 않았을 때 호출되는 메서드(필요에 따라 처리 가능).
    • 이 코드에서는 첫 번째 항목인 “선택 안함”이 선택되면 아무 동작도 하지 않으며, 나머지 항목이 선택될 때만 Toast 메시지와 텍스트 뷰에 값을 표시합니다.
  • SeekBar 기본 속성
    • SeekBar의 기본 값은 0부터 max까지의 값으로 설정됩니다. 이를 XML 레이아웃 파일에서 설정하거나 코드에서 설정할 수 있습니다.