본문 바로가기

안드로이드/androidstudio

[Android] Spinner 사용법

  이번 포스팅에서는 Spinner을 사용하는 방법을 포스팅하겠습니다.

 sinner은 아래 사진과 같이 박스를 클릭할 경우 목록들을 보여주어 선택하는 것입니다. 

 먼저 layout에서 선언하는 방법은 아래와 같습니다. 아래 코드에서 entries = 에 있는 @array는 제가 res에 따로 추가한 string-array입니다. 아래와 같이 sppiner에 넣어주시면 해당 string-array 에 있는 글들을 담을수있습니다.

그리고 spinnerMode는 위 사진처럼 아래로 나오는 dropdown과 dialog창으로 띄워서 보여주는 두가지 방식 중 한가지를 설정할수있습니다.

<Spinner
    android:id="@+id/categorySpinner"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:entries="@array/category"
    android:spinnerMode="dropdown"
    />

아래는 entries에 넣은 @array의 부분입니다. 별도의 res 파일로 string.xml에 작성하였습니다.

    <string-array name="category">
        <item>전체</item>
        <item>구성1</item>
        <item>구성2</item>
        <item>구성3</item>
        <item>구성4</item>
    </string-array>
</

이렇게 설정을 했다면 이제 선택한 값을 읽어와야겠죠?

 아래 코드는 fragment에서 OnViewCreated 부분에서 선언한 부분입니다.

 먼저 spinner의 id.onItemSelectedListener를 선언합니다.

binding.categorySpinner.onItemSelectedListener = object: OnItemSelectedListener{
    val categoryList = resources.getStringArray(R.array.category)
    // spinner 에서 값 선택시
    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long){
        category =categoryList[position]
    }
    override fun onNothingSelected(parent: AdapterView<*>?) {}
}

이후 입력값으로 object : OnItemSelectedListener{} 하시면 선택했을떄와 선택한것이 없을때에 대한 두가지 함수를 override 하게 됩니다. 그럼 여기서 제가 아까 string-array를 변수로 저장해야 저희가 읽어올수있습니다.

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long){
    category =categoryList[position]
}

여기서 position이 여러분이 선택한 부분의 위치값입니다. 그래서   string-array 를 저장한 변수 이름[position]을 하시면 선택된 spiiner의 값을 읽어오실수있습니다.