안드로이드/개발관련(Kotlin)

안드로이드 스피너(Spinner, Kotlin)

닉네임못짓는사람 2021. 12. 26. 19:34
반응형

스피너는 위와 같이 여러 개의 값 중에 하나의 값을 선택할 수 있도록 하는 방법 중 하나이다.

스피너는 초기에 기본값으로 설정된 값을 표시하고 있으며,

클릭 시 드롭다운 메뉴를 표시하여 자신이 원하는 값을 선택할 수 있다.

 

스피너에 제공하는 값들은 SpinnerAdapter를 통해 제공되는데,

값들을 어떠한 자료 구조에서 가져오느냐에 따라 배열의 경우 ArrayAdapter,

데이터베이스 쿼리에서 가져오는 경우 CursorAdapter 등을 사용할 수 있다.

 

이번 글에서는 ArrayAdapter를 사용하여 배열 구조에서 값들을 가져와보도록 하자.

 

XML 만들기


스피너에 사용할 값들이 사전에 결정된 경우에는 문자열 리소스 파일을 정의하여 사용할 수 있다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="animals">
        <item>토끼</item>
        <item>곰</item>
        <item>호랑이</item>
        <item>사자</item>
        <item>고양이</item>
    </string-array>
</resources>

먼저, res/values폴더에 array.xml파일을 하나 생성한 뒤 위와 같은 코드를 작성해준다.

Layout 정의


그 후 layout을 정의해주는데, 간단하게 스피너와 선택한 값을 확인하는 버튼 하나만 추가해주자.

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="값 확인" />

Adapter 연결


이제 위의 문자열 배열을 ArrayAdapter를 통해 스피너와 연결해주면 된다.

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        val spin = binding.spinner
        spin.adapter = ArrayAdapter.createFromResource(this, R.array.animals, android.R.layout.simple_spinner_item)

        binding.button.setOnClickListener {
            Toast.makeText(this, spin.selectedItem.toString(), Toast.LENGTH_SHORT).show()
        }
    }
}

위와 같이 코드를 작성하여 간단한 스피너를 완성해보았다.

 

또한 스피너에 Adapater를 연결했을 때 아무런 추가 작업도 하지 않으면

기본적으로 가장 첫 번째 값을 기본값으로 가지게 된다.

기본값을 바꾸려면 setSelection()을 사용하여 값을 변경해주면 된다.

반응형