スピナーに画像をセットする処理。
作成するのに少々時間がかかったのでメモ。
スピナーアイテムのレイアウト作成
各々の画像表示用のアイテム
item.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"
android:layout_width="60dp"
android:background="#FFFFFF"
android:layout_height="40dp">
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Adapterの作成
getDropDownView
のコメントアウトを外すと、ドロップダウンのビューと表示ビューを切り分けることができるようになる。
SpinnerAdapter.kt
class SpinnerAdapter(private val imageResIdList: List<Int>) : BaseAdapter() {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view = convertView ?: LayoutInflater.from(parent?.context)
.inflate(R.layout.item, parent, false)
view.findViewById<ImageView>(R.id.image_view).setImageResource(imageResIdList[position])
return view
}
override fun getItem(position: Int): Any {
return imageResIdList[position]
}
override fun getCount(): Int {
return imageResIdList.size
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
/*
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view = convertView ?: LayoutInflater.from(parent?.context)
.inflate(R.layout.dropdown_item, parent, false)
view.findViewById<ImageView>(R.id.image_view).setImageResource(imageResIdList[position])
return view
}
*/
}
Activityレイアウト作成
メインビュー内にスピナーを配置。
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="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Acitiviyの処理作成
スピナーにアダプターをセット。
MainActivity.kt
binding.spinner.adapter = SpinnerAdapter(listOf(R.drawable.check_icon, R.drawable.clear_icon, R.drawable.square_icon))