Android kotlin 按钮实现Spinner 自定义样式展示
时间: 2023-12-04 16:08:35 浏览: 191
Android 按钮实现Spinner效果
要实现 Android Kotlin 中按钮展示 Spinner 的自定义样式,可以按照以下步骤进行:
1. 在布局文件中添加一个 Button 控件和一个隐藏的 Spinner 控件:
```xml
<Button
android:id="@+id/btn_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select Item"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"/>
```
2. 在 Kotlin 代码中设置 Button 的点击事件:
```kotlin
btn_spinner.setOnClickListener {
spinner.performClick()
}
```
3. 创建一个自定义的 Spinner 样式,例如:
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp">
<ImageView
android:id="@+id/img_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<TextView
android:id="@+id/tv_item_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Item Name"
android:textSize="16sp"/>
</LinearLayout>
```
4. 创建一个自定义的 Spinner 适配器:
```kotlin
class CustomSpinnerAdapter(private val context: Context, private val items: List<String>) : ArrayAdapter<String>(context, 0, items) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var view = convertView
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_spinner, parent, false)
}
val tvItemName = view?.findViewById<TextView>(R.id.tv_item_name)
tvItemName?.text = items[position]
return view!!
}
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
var view = convertView
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_spinner_dropdown, parent, false)
}
val tvItemName = view?.findViewById<TextView>(R.id.tv_item_name)
tvItemName?.text = items[position]
return view!!
}
}
```
5. 在 Kotlin 代码中设置 Spinner 的适配器和选择事件:
```kotlin
val items = listOf("Item 1", "Item 2", "Item 3")
val adapter = CustomSpinnerAdapter(this, items)
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
btn_spinner.text = items[position]
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// Do nothing
}
}
```
这样就可以实现一个自定义样式的 Spinner,展示在一个 Button 控件上。
阅读全文