본문 바로가기
안드로이드

[Android] spinner

by 엘딘 2022. 3. 23.

스피너를 클릭할 시 선택가능한 값들이 드롭다운되어 메뉴로 표시

 

 

1. activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <Spinner
            android:id="@+id/spinner"
            android:layout_centerHorizontal="true"
            android:layout_width="373dp"
            android:layout_height="70dp"
            app:layout_constraintBottom_toTopOf="@+id/textView"
            android:layout_marginBottom="76dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>

    <TextView
            android:layout_width="265dp"
            android:layout_height="79dp"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:id="@+id/textView"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

2. item_spinner.xml

 스피너 아이템을 출력할 layout

<TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tvItemSpinner"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:paddingTop="10dp"
        android:paddingStart="30dp"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        android:paddingLeft="30dp"/>

 

 

3.  MainActivity 
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 호출
        setupSpinnerFruit()

        setupSpinnerHandler()
    }
    // val fruit = arrayOf("과일선택", "사과", "배", "바나나", "포도")

    // spinner에 값을 설정하는 함수
    fun setupSpinnerFruit(){
        // spinner item
        // item 데이터는 외부에서 가져와도 됨
        val fruit = arrayOf("과일선택", "사과", "배", "바나나", "포도")

        // res/values에 array.xml을 만들어서 그곳의 데이터를 갖고옴
        //val fruit = resources.getStringArray(R.array.fruit)

        // adapter : 데이터(배열)와 layout(item_spinner.xml)을 연결
        val adapter = ArrayAdapter(this, R.layout.item_spinner, fruit)

        // spinner에 적용
        val spinner = findViewById<Spinner>(R.id.spinner)
        spinner.adapter = adapter
    }


    // 선택시 결과를 출력해 주는 함수
    fun setupSpinnerHandler(){
        val spinner = findViewById<Spinner>(R.id.spinner)
        val textView = findViewById<TextView>(R.id.textView)

        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onItemSelected(p0: AdapterView<*>?, view: View?, position: Int, id: Long) {
                textView.text = "선택됨: $position ${spinner.getItemAtPosition(position)}"
            }

            override fun onNothingSelected(p0: AdapterView<*>?) {
                TODO("Not yet implemented")
            }
        }
    }

}

 

 

3-1 MainActiviti(2) - binding
class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        setContentView(binding.root)

        var data = listOf("선택하세요", "1월", "2월", "3월", "4월", "5월", "6월")

        var adapter = ArrayAdapter<String>(this, R.layout.item_spinner, data)
        binding.spinner.adapter = adapter

        binding.spinner.onItemSelectedListener = object :AdapterView.OnItemSelectedListener{
            override fun onItemSelected(p0: AdapterView<*>?, p1: View?, pos: Int, p3: Long) {
                binding.result.text = data.get(pos)
            }
            override fun onNothingSelected(p0: AdapterView<*>?) {
                TODO("Not yet implemented")
            }
        }
    }
}

 

 

 

 

 

 

 

 

 

'안드로이드' 카테고리의 다른 글

[Android] ListView  (0) 2022.03.24
[Android] image  (0) 2022.03.23
[Android] Button  (0) 2022.03.23
[Android] Intent  (0) 2022.03.22
[Android] Fragment  (0) 2022.03.22

댓글