devlog of ShinJe Kim

[TIL] 2020-01-31

|

Today I Leaned

  • Spinner에 라디오 버튼을 구현하는 법을 찾아 한참 삽질했다. 결론은, 아래와 같이 하면 된다.

activity_main.xml (스피너를 넣을 화면에 스피너 생성)

<!--activity_main.xml-->
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="50dp"
        android:spinnerMode="dialog"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

스피너에 넣을 값을 values>strings.xml에 저장(파일명은 상관없음)

<!--strings.xml-->
<resources>
    <string-array name="stringArray">
        <item>apple</item>
        <item>banana</item>
        <item>citrus</item>\
    </string-array>
</resources>

메인 액티비티에서 어답터로 스피너를 생성하고, 값을 넣어준다. 나는 이 부분에서 삽질을 했다. spinner에 radio button을 나타나게 하는 방법을 갖가지 검색어로 구글링했을 때에는 adapter.setDropDownViewResourceandroid.R.layout.simple_spinner_dropdown_item 레이아웃을 사용하여 아이템을 보여주니 라디오버튼이 나왔었다. 하지만 이것은 옛날 자료였고 라이브러리가 변경된 것이다..ㅜ 지금은 아래와 같이 android.R.layout.simple_list_item_single_choice 혹은 android.R.layout.simple_list_item_single_choice 레이아웃을 적용해주면 스피너 아이템에 라디오버튼이 나타난다. (검색 범위를 2015년부터로 바꾸고나서 바로 찾았다. 진작 했으면 시간을 절약했을것을.. 반성하자)

class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {

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

        ArrayAdapter.createFromResource(this, R.array.stringArray, android.R.layout.simple_spinner_item).also { adapter ->
            adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice)
            spinner.adapter = adapter
            spinner.onItemSelectedListener = this
        }
    }
}

Comments