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. 실행결과