Spinner控件学习

Spinner控件标准效果图:

使用ArrayAdapter适配Spinner

<Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown">
</Spinner>
定义spinner, spinnerMode指定点击的效果,dropdown表示向下的列表,dialog的话就是弹出一个可下拉的对话框。

public class MainActivity extends AppCompatActivity {

    private List<Person> list = new ArrayList<>();
    private Spinner spinner;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = (Spinner) findViewById(R.id.spinner);
        list.add(new Person("程序员1", 1));
        list.add(new Person("程序员2", 2));
        list.add(new Person("程序员3", 3));
        list.add(new Person("程序员4", 4));
        list.add(new Person("程序员5", 5));
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,list);
	spinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Person person = list.get(position);
                Toast.makeText(MainActivity.this, "你点击的是" + person.getName(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

}



这里使用ArrayAdapter来适配spinner。 可以调用spinner.setOnItemSelectedListener()方法来响应点击的Item。ArrayAdapter构造的第二个参数是未展开的spinner样式。

spinner.setDropDownViewResource()中的样式是展开后的。


使用自定义BaseAdapter

创建需要的spinner样式:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown">
    </Spinner>
</LinearLayout>

创建对象类

public class Person {
    private String name;
    private int id;

    public Person() {}
    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

创建MyAdapter继承BaseAdapter

public class MyAdapter extends BaseAdapter {

    private List<Person> mList;
    private Context mContext;
    private int resourceId;

    public MyAdapter(List<Person> list, int resource, Context context) {
        super();
        mList = list;
        mContext = context;
        resourceId = resource;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(mContext).inflate(resourceId, null);
        if(convertView != null) {
            TextView id = (TextView) convertView.findViewById(R.id.id);
            TextView name = (TextView) convertView.findViewById(R.id.name);
            Person person = (Person) getItem(position);
            id.setText(String.valueOf(person.getId()));
            name.setText(person.getName());
        }
        return convertView;
    }
}

构造函数传进去3个参数。 最重要的是重写getView()方法。

MainActivity代码

public class MainActivity extends AppCompatActivity {

    private List<Person> list = new ArrayList<>();
    private Spinner spinner;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = (Spinner) findViewById(R.id.spinner);
        list.add(new Person("程序员1", 1));
        list.add(new Person("程序员2", 2));
        list.add(new Person("程序员3", 3));
        list.add(new Person("程序员4", 4));
        list.add(new Person("程序员5", 5));
        MyAdapter adapter = new MyAdapter(list, R.layout.adapter_xml, this);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Person person = list.get(position);
                Toast.makeText(MainActivity.this, "你点击的是" + person.getName(), Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

}
这里就没有setDropDownViewResource()方法。 样式都是传进去的样式。

spinner菜单显示形式:

android:spinnerMode = "dropdown";

android:spinnerMode = "dialog"


dropdown dialog

Theme.Light

默认为弹出框的形式

          

Theme.Holo.Light 


默认为下拉菜单的形式  

           


Spinner一些属性

 spinner.setDropDownVerticalOffset(int); 

dropdown模式时,下拉的选择窗口相对于spinner在水平方向的偏移量。

spinner.dropDownVerticalOffset(int)

dropdown模式时,下拉的选择窗口相对于spinner在竖直方向的偏移量。

android:DropDownWidth(int)

spinner.setDropDownWidth(int);

dropdown模式时,设定下拉窗口的宽度。

android:popupBackground="#3C2F"

spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值