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);
原文:http://www.cnblogs.com/SunnyRainPlant/p/3721504.html