Android/Kotlin

[Android, Kotlin] Spinner

겨울시인 2022. 4. 23. 00:05

0. Spinner

  • Spinner 란 Dropdown 방식으로 선택 목록을 제공하는 View 를 맗한다.
  • 각 항목의 선택에 따라 특정 이벤트 처리할 수 있도록 사용할 수 있다.

 
 

1. 기능 구현

  • 준비된 Array List 로부터 Spinner 를 구현해보자.
  • 선택된 항목의 이벤트 처리로는 TextView 에 그 값을 표시하는 것으로 하자.

 
 

2. Android Studio에서 기본 프로젝트(with empty activity) 생성하자!

생성시 'Empty Activity'로 기본 생성

 
 

3. ViewBinding 사용을 위한 build.gradle 설정

android {
        // 뷰 바인딩 옵션 활성화
        viewBinding {
            enabled = true
        }
    }

 
 

4. array.xml

  • Spinner 에 들어갈 항목(string-array)을 구성해둔다.
  • res -> values -> New -> Values Resource File : array.xml 생성

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="testList">
        <item>겨울시인</item>
        <item>달빛시인</item>
        <item>불빛시인</item>
        <item>청빛시인</item>
    </string-array>
</resources>

 
 

5. activity_main.xml (화면 구성)

Spinner를 배치하고, 결과값을 출력할 TextView 도 준비해보자.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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="200dp"
        android:layout_height="60dp"
        android:entries="@array/testList">
    </Spinner>

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:textColor="@color/purple_500"
        android:text="드롭다운 결과">
    </TextView>
</LinearLayout>

 
 

6. MainActivity.kt

  • resources.getStringArray(R.array.testList)

    준비된 항목 리스트를 가져온다.

  • Adapter 생성 : ArrayAdapter(Context, Spinner에 적용할 레이아웃, 항목리스트)

    simple_spinner_item : 기본 제공되는 레이아웃으로 레이아웃을 직접 정의하지 않을때 사용

  • 항목 선택 이벤트

    onItemSelectedListener 안의 override 메소드 onItemSelected 에서 처리한다.

class MainActivity : AppCompatActivity(){

    private var mBinding : ActivityMainBinding? = null
    private val binding get() = mBinding!!

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

        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val testList = resources.getStringArray(R.array.testList)

        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, testList)
        binding.spinner.adapter = adapter

        binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                    binding.tvResult.text = parent.getItemAtPosition(position).toString()
                }
                override fun onNothingSelected(parent: AdapterView<*>) {

                }
        }
    }
    override fun onDestroy() {
        super.onDestroy()
        mBinding = null
    }
}

 
 

7. 실행결과

 
 

8. Reference

유튜버 홍드로이드님의 안드로이드 앱 만들기 #20