참고. https://developer.android.com/guide/topics/ui/controls/spinner?hl=ko
프로젝트 진행 중 스피너를 활용할 일이 있어 다음과 같이 스피너를 활용해 보았습니다.



.
.
<Spinner
android:id="@+id/notificationTimeSpinner"
android:layout_width="200dp"
android:layout_height="30dp"
android:layout_marginTop="35dp"
android:background="@drawable/bg_spinner_white_round_10dp"
app:layout_constraintStart_toEndOf="@id/notificationSpinner1TextView"
app:layout_constraintTop_toBottomOf="@id/notificationExplanationTextView"
app:layout_constraintEnd_toEndOf="parent"/>
.
.
<Spinner
android:id="@+id/notificationPriceSpinner"
android:layout_width="200dp"
android:layout_height="30dp"
android:layout_marginTop="35dp"
android:background="@drawable/bg_spinner_white_round_10dp"
app:layout_constraintStart_toEndOf="@id/notificationSpinner1TextView"
app:layout_constraintTop_toBottomOf="@id/notificationSpinner1TextView"
app:layout_constraintEnd_toEndOf="parent"/>
.
.
선택 항목을 사전에 문자열 리소스 파일에 정의합니다.
<resources>
<string-array name="spiner_time_array">
<item>1분</item>
<item>5분</item>
<item>10분</item>
<item>30분</item>
<item>60분</item>
</string-array>
<string-array name="spiner_price_array">
<item>1%</item>
<item>5%</item>
<item>10%</item>
<item>50%</item>
<item>100%</item>
</string-array>
</resources>
Activity 또는 Fragment에 ArrayAdapter의 인스턴스를 통해 스피너에 다음과 같이 배열을 제공합니다.
ArrayAdapter.createFromResource(
requireContext(),
R.array.spiner_time_array,
android.R.layout.simple_spinner_item
).also {
it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.notificationTimeSpinner.adapter = it
}
ArrayAdapter.createFromResource(
requireContext(),
R.array.spiner_price_array,
android.R.layout.simple_spinner_item
).also {
it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.notificationPriceSpinner.adapter = it
}
createFromResource() 메서드를 사용하면 문자열 배열에서 ArrayAdapter를 생성할 수 있습니다. 이 메서드의 세 번째 인수는 선택된 항목이 스피너 컨트롤에 나타나는 방식을 정의하는 레이아웃 리소스입니다. simple_spinner_item 레이아웃은 플랫폼에서 제공하며 스피너의 모양에 관해 자체적인 레이아웃을 직접 정의하고자 하지 않을 경우 사용해야 하는 기본 레이아웃입니다.
그런 다음, setDropDownViewResource(int)를 호출하여 어댑터가 스피너 선택 항목의 목록을 표시하는 데 사용해야 하는 레이아웃을 지정해야 합니다.(simple_spinner_dropdown_item은 플랫폼에서 정의하는 또 다른 표준 레이아웃임).
setAdapter()를 호출하여 어댑터를 Spinner에 적용합니다
이벤트 핸들러를 정의하기 위해 AdapterView.OnItemSelectedListener 인터페이스와 콜백 메서드인 onItemSelected()와 onNothingSelected()를 구현합니다.
binding.run {
notificationTimeSpinner.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) {
if (parent != null) {
Toast.makeText(
requireContext(),
parent.getItemAtPosition(pos).toString(),
Toast.LENGTH_SHORT
).show()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
return
}
}
notificationPriceSpinner.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) {
if (parent != null) {
Toast.makeText(
requireContext(),
parent.getItemAtPosition(pos).toString(),
Toast.LENGTH_SHORT
).show()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
return
}
}
}
onItemSelected()에 해당 아이템을 클릭했을 때, 처리할 내용들을 구현하면 됩니다.
지금 코드에는 toast 메시지를 띄어주도록 구현했습니다.