Spinner 提供了快速从一个数据集中选择一个值的方法,默认显示的是当前选择的值,点击可以显示下拉列表,用户可以列表中选择一个新值。
spinner有两种显示模式dialog和dropdown,有不同的属性对应使用:
spinner源码中的片段
switch (mode) {
case MODE_DIALOG: {
mPopup = new DialogPopup();
break;
}case MODE_DROPDOWN: {
DropdownPopup popup = new DropdownPopup(context, attrs, defStyle);......
}
dialog | 0 | Spinner options will be presented to the user as a dialog window. |
dropdown | 1 | Spinner options will be presented to the user as an inline dropdown anchored to the spinner widget itself. |
首先可以在xml layout 中添加一个spinner
<Spinner
android:id="@+id/planets_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
sinner显示的数据用一个adapter来适配,和ListView,GradView,
可以在xml定义一个String 数组
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
在activity或fragment中使用代码完成绑定
ArrayAdapter中初始化的那个layout(自带布局文件是一个TextView id是“@android:id/text1”),是用来渲染spinner被选择的item的样式,而setDropDownResource这个layout(自带布局文件是一个CheckedTextView id是"@android:id/text1"),则是弹出框时用的item样式。
你可以通过这两个layout自定义样式,但是要注意第一个也就是ArrayAdapter的layout是显示的item的layout,而spinner本身还有个背景,直接设置spinner的背景即可。
Spinner spinner =(Spinner) findViewById(R.id.spinner);
//创建一个数组适配器,参数1为context上下文,参数2为绑定的数据,这里是一个数组,一般用List,参数3是系统默认的spinner布局
ArrayAdapter<CharSequence> adapter =ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
//设置下拉列表出现时的风格样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//最后spinner设置样式
spinner.setAdapter(adapter);
当用户从下拉列表选择一个item时,spinner收到一个item已选择的事件,定义一个实现 AdapterView.OnItemSelectedListener接口的
监听器,实现onItemSelected()
方法。
public class SpinnerActivity extends Activity implements OnItemSelectedListener {
...public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
//获得绑定数据的一个item
// parent.getItemAtPosition(pos)
}public void onNothingSelected(AdapterView<?> parent) {
// 没选择值时
}
}
第一次进入activity时,会执行一次onItemSelected() 方法
最后设置监听器
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);