Spinner 简介

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);

 

posted @ 2014-05-11 11:34  晴天雨植  阅读(492)  评论(0编辑  收藏  举报