Android Spinner总结
文章目录
- Android Spinner总结
- 概述
- 简单使用
- 自定义布局
- 自定义Adapter
- 添加分割线
- 源码下载
Android Spinner总结
概述
在 Android 中,Spinner
是一个下拉选择框。
简单使用
xml布局:
<Spinner
android:id="@+id/spinner1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
代码:
private val items = arrayOf("选项1", "选项2", "选项3", "选项4")
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, items)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner1.adapter = adapter
spinner1.onItemSelectedListener =
object : android.widget.AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: android.widget.AdapterView<*>?,
view: android.view.View?,
position: Int,
id: Long
) {
showToast(items[position])
}
override fun onNothingSelected(parent: android.widget.AdapterView<*>?) {
showToast("未选择")
}
}
自定义布局
xml布局:
xml<Spinner
android:id="@+id/spinner2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/spinner_bg" />
spinner_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="100dp"
android:drawableRight="@drawable/ic_like"
android:drawablePadding="5dp"
android:padding="10dp"
android:id="@+id/textView"
android:textColor="#6d6d6d"
android:textSize="15sp"
tools:text="一年级" />
spinner_bg.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<stroke
android:width="1dp"
android:color="#ff999999" />
<corners android:radius="4dp" />
</shape>
</item>
<item
android:gravity="right|center_vertical"
android:right="8dp">
<bitmap android:src="@drawable/icon_arrow_down" />
</item>
</layer-list>
代码:
private val items = arrayOf("选项1", "选项2", "选项3", "选项4")
val adapter = ArrayAdapter(this, R.layout.spinner_layout, items)
spinner2.adapter = adapter
spinner2.setPopupBackgroundResource(R.drawable.pop)
spinner2.post {
spinner2.dropDownVerticalOffset = spinner2.measuredHeight
}
自定义Adapter
xml布局:
<Spinner
android:id="@+id/spinner3"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/spinner_bg" />
spinner_layout2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="100dp"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:textColor="#6d6d6d"
android:textSize="15sp"
tools:text="一年级" />
</LinearLayout>
代码:
class MySpinnerAdapter(private val context: Context, private val list: Array<String>) :
BaseAdapter() {
override fun getCount() = list.size
override fun getItem(position: Int): Any? {
return null
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val itemView = LayoutInflater.from(context).inflate(R.layout.spinner_layout2, null)
val textView = itemView.findViewById<TextView>(R.id.textView)
textView.text = list[position]
return itemView
}
}
spinner3.adapter = MySpinnerAdapter(this, items)
spinner3.setPopupBackgroundResource(R.drawable.pop)
spinner3.post {
spinner3.dropDownVerticalOffset = spinner3.measuredHeight
}
添加分割线
定义样式:
<style name="SpinnerStyle" parent="android:Widget.ListView.DropDown">
<item name="android:divider">#333</item>
<item name="android:dividerHeight">1dp</item>
</style>
设置主题:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:dropDownListViewStyle">@style/SpinnerStyle</item>
</style>